我对synchronized threads
有疑问。请参阅以下代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/types.h>
#include<semaphore.h>
int a=0;
sem_t s1, s2;
void* t1handler(void *data)
{
while(1){
sem_wait(&s1);
a++;
printf("incr %d\n",a);
sem_post(&s2);
}
}
void* t2handler(void* data)
{
while(1){
sem_wait(&s2);
a--;
printf("decr %d\n",a);
sem_post(&s1);
}
}
int main(){
pthread_t t1,t2;
sem_init(&s1,0,1);
sem_init(&s2,0,0);
pthread_create(&t1,NULL,t1handler,NULL);
pthread_create(&t2,NULL,t2handler,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
可能不是一个好例子,但thread2
等待thread1
完成,反之亦然synchronize
。当threads
两者没有同时执行时,它的用途是什么?。
threads
可用于synchronization
的任何示例?
提前致谢。
答案 0 :(得分:1)
你的例子不是很明确。我稍微改了一下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <semaphore.h>
int a=0;
sem_t s1, s2;
void* t1handler(void *data)
{
while(1){
sem_wait(&s1);
printf("send 1000$ to %d\n",a);
sem_post(&s2);
}
}
void* t2handler(void* data)
{
while(1){
sem_wait(&s2);
a++;
printf("client is now #%d\n",a);
sem_post(&s1);
}
}
int main(){
pthread_t t1,t2;
sem_init(&s1,0,1);
sem_init(&s2,0,0);
pthread_create(&t1,NULL,t1handler,NULL);
pthread_create(&t2,NULL,t2handler,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
如果线程不同步,则一个客户端可以获得2000 $或0 $。
在现实世界中,这种线程的可能用途是当一个人获得输入(例如电影片名)而另一个产生输出(流式传输电影)时。