pthread线程库的使用
在源码中使用头文件 pthread.h
用gcc链接时加上 -lpthread 选项,链接线程库
int pthread_create( pthread_t *thread , const pthread_attr_t *attr, void*(*start_rtn)(void*), void * arg);/* 参数1:产生线程的标识符 参数2:所产生线程的属性,通常设为NULL 参数3:新的线程所执行的函数 参数4:新的线程函数的参数 函数返回值:若线程创建成功则返回0,否则返 回-1. */
int pthread_join( pthread_t thread , void **value_ptr);/* 参数1:等待线程的标识符 参数2:用户定义的指针,用来存储被等待线程的返回值 函数返回值:若执行成功则返回0,失败返回错误号 如果一个线程要等待另一个线程的终止,则使用该函数 */
同步互斥机制提供了三种方法
int sem_init ( sem_t *sem, int pshared, unsigned int value);/* 参数1: 待初始化的信号量 参数2: 信号量的类型。如果值为0,表示是当前进程的局部信号量,否则是其它进程可以共享该信号量。 LINUX线程一般不支持进程间共享信号量,该值设为0. 参数3:信号量的初始值。 调用成功时返回0,失败返回-1. */
int sem_wait(sem_t * sem);/* 参数: 由sem_init调用初始化的信号量对象的指针 sem的值减1 等待信号量,如果信号量的值大于0,将信号量的值减1,立即返回。如果信号量的值为0,则线程阻塞。相当于P操作。 成功返回0,失败返回-1 */
int sem_post(sem_t * sem);/* 参数: 由sem_init调用初始化的信号量对象的指针 释放信号量,让信号量的值加1。相当于V操作。 */
int sem_destroy(sem_t * sem);/* 参数: 由sem_init调用初始化的信号量对象的指针 归还自己占据的一切资源。 在清理信号量的时候如果还有线程在等待它,用户就会收到一个错误。 */