线程API

1.1线程的创建

#include 
int 
pthread_create(
    pthread_t *             thread,
    const pthread_attr_t *  attr,
    void*                   (*start_routine)(void*),
    void *                  arg);

参数1:指向pthread_t结构类型的指针,利用该结构与线程交互。
参数2:用于指定该参数可能具有的属性。
参数3:指示线程在哪个函数(函数名称start_routine)中运行。
参数4:传递给线程开始执行的函数的参数。

1.2线程的完成

int pthread_join(pthread_t thread, void **value_ptr);

参数1:指定要等待的线程。
参数2:得到的返回值。
线程的返回值不要返回指针,并让它指向线程调用栈上分配的东西。线程函数内的变量分配在栈中,返回后栈会释放该内存。

1.3锁

临界区需要通过锁来保护。

int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

如果在调用pthread_mutex_lock时没有其它线程保持有锁,线程将获取该锁并进入临界区。如果另一线程保持该锁,那么尝试获取该锁的线程将不会从该调用返回,直到获得该锁。函数三初始化互斥变量。

1.4条件变量

线程之间的交互信号。

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_signal(pthread_cond_t *cond);

第一个函数使调用线程进入休眠状态,等待其他线程发出信号,同时会让调用者睡眠时释放锁。

你可能感兴趣的:(线程API)