如果使用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;
}