📅  最后修改于: 2023-12-03 15:29:41.867000             🧑  作者: Mango
在多线程编程中,线程函数是非常重要的一环。线程函数是需要被并发执行的代码块,它会被封装成线程并加入到进程中。C/C++提供了一系列线程函数供程序员使用。本文将介绍C/C++中常用的线程函数,涉及线程创建、等待、退出及互斥量的使用。
C/C++中使用pthread_create
函数创建线程,其函数原型如下:
int pthread_create(pthread_t* thread, const pthread_attr_t* attr,
void* (*start_routine)(void*), void* arg);
其中,参数说明如下:
thread
:新创建的线程ID指针attr
:线程属性,可用NULL
表示默认属性start_routine
:线程执行函数,线程被创建后会立即执行该函数arg
:线程执行函数的参数,如果函数无参数则为NULL
注意:start_routine
函数的返回值必须是void*
类型,而且必须强制类型转换为程序员定义的返回类型。
下面是一个例子:
#include <pthread.h>
#include <stdio.h>
void* sayHello(void* args)
{
printf("Hello World\n");
return NULL;
}
int main()
{
pthread_t pid;
pthread_create(&pid, NULL, sayHello, NULL);
pthread_join(pid, NULL);
return 0;
}
C/C++中使用pthread_join
函数等待线程结束,其函数原型如下:
int pthread_join(pthread_t thread, void** retval);
其中,参数说明如下:
thread
:等待结束的线程IDretval
:线程返回值的存储空间,如果不需要可用NULL
表示下面是一个例子:
#include <pthread.h>
#include <stdio.h>
void* sayHello(void* args)
{
printf("Hello World\n");
return NULL;
}
int main()
{
pthread_t pid;
pthread_create(&pid, NULL, sayHello, NULL);
pthread_join(pid, NULL);
return 0;
}
C/C++中使用pthread_exit
函数主动退出线程,其函数原型如下:
void pthread_exit(void* retval);
其中,参数说明如下:
retval
:线程返回值,通过pthread_join
函数获取下面是一个例子:
#include <pthread.h>
#include <stdio.h>
void* sayHello(void* args)
{
printf("Hello World\n");
pthread_exit(NULL);
}
int main()
{
pthread_t pid;
pthread_create(&pid, NULL, sayHello, NULL);
pthread_join(pid, NULL);
return 0;
}
C/C++中使用pthread_mutex_init
、pthread_mutex_lock
、pthread_mutex_unlock
、pthread_mutex_destroy
函数实现互斥量,其中,函数原型如下:
int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr);
int pthread_mutex_lock(pthread_mutex_t* mutex);
int pthread_mutex_unlock(pthread_mutex_t* mutex);
int pthread_mutex_destroy(pthread_mutex_t* mutex);
其中,参数说明如下:
mutex
:互斥量对象attr
:互斥量属性,可用NULL
表示默认属性下面是一个例子:
#include <pthread.h>
#include <stdio.h>
int count = 0;
pthread_mutex_t mutex;
void* increment(void* args)
{
pthread_mutex_lock(&mutex);
count++;
pthread_mutex_unlock(&mutex);
return NULL;
}
int main()
{
pthread_t p1, p2;
pthread_mutex_init(&mutex, NULL);
pthread_create(&p1, NULL, increment, NULL);
pthread_create(&p2, NULL, increment, NULL);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
printf("Count = %d\n", count);
pthread_mutex_destroy(&mutex);
return 0;
}
以上就是C/C++中常用的线程函数和互斥量使用方法的介绍。在进行多线程编程时,需要谨慎使用这些函数,以确保程序的正确性和稳定性。