【操作系统实验】线程的创建+信号量通信

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值