Linux下的信号灯semaphore的应用

来源:互联网 发布:网络账号被盗报警 编辑:程序博客网 时间:2024/05/31 13:15

如果使用mutex_lock,mutex_unlock方式同步操作,如果当很长一段时间内都没有任何操作,

但是线程依然会不停地执行lock,unlock操作。所以这样的做法是完全没有任何的意义的。

Linux系统还提供了另外一种同步机制,信号灯,Semaphore。使用方法如下例子:

示例说明:一个线程在控制台输入,另一个线程将输入的结果打印显示。

示例代码如下:

#include "pthread_head.h"sem_t sem;char buf[SIZE];void *tfn1(void *arg){    int i;    for(i = 0; ; i++){sem_wait(&sem); //p操作if(strncmp(buf,"quit",4) == 0)    break;printf("%s",buf);    }    return (void*)0;}void *tfn2(void *arg){    int i;    for(i = 0; ; i++){fgets(buf,SIZE,stdin);sem_post(&sem); //v操作if(strncmp(buf,"quit",4) == 0)    break;    }    return (void*)0;}int main(void){    pthread_t tid1,tid2;    sem_init(&sem,0,0);    if(pthread_create(&tid1,NULL,tfn1,NULL) < 0)p_error("pthread_create");    if(pthread_create(&tid2,NULL,tfn2,NULL) < 0)p_error("pthread_create");    if(pthread_join(tid1,NULL) < 0)p_error("pthread_join");    if(pthread_join(tid2,NULL) < 0)p_error("pthread_join");    return 0;}

0 0
原创粉丝点击