sem_init:
int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));
功能:初始化信号量
返回值:创建成功返回0,失败返回-1
参数sem:指向信号量结构的一个指针
参数pshared:不为0时此信号量在进程间共享,为0时当前进程的所有线程共享
参数value:信号量的初始值
sem_wait():
用来阻塞当前线程,直到信号量的值大于0,解除阻塞。解除阻塞后,sem的值-1,表示公共资源被执行减少了。
例如:如果你对一个值为2的信号量调用sem_wait(),线程将会继续执行,执行后,信号量的值将-1。
当初始化value=0后,使用sem_wait会阻塞这个线程,这个线程函数就会等待其它线程函数调用sem_post增加了了这个值使它不再是0, 才开始执行,然后value值-1。
sem_post:
用于增加信号量的值+1
sem_destroy(&sem):
释放信号量
int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (start_rtn)(void),void *restrict arg);
功能:UNIX环境创建线程
参数:
(1)tidp:事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID。
(2)attr:用于定制各种不同的线程属性。APUE的12.3节讨论了线程属性。通常直接设为NULL。
(3)start_rtn:新创建线程从此函数开始运行。无参数是arg设为NULL即可。
(4)arg:start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。当多于一个参数时应当使用结构体传入。
返回值:
成功返回0,否则返回错误码。
int pthread_join(pthread_t thread, void **retval);
功能:主线程等待子线程的终止。也就是在主线程调用了pthread_join()方法后面的代码,只有等到子线程结束了才能执行。
参数:
pthread_t thread: 被连接线程的线程号
void **retval : 指向一个指向被连接线程的返回码的指针的指针
return:
线程连接的状态,0是成功,非0是失败
void pthread_exit(void *retval);
功能:线程退出
函数参数:retval表示线程退出状态,通常传NULL
编译时注意:
需加gcc work1