使用同步线程有什么好处?

时间:2016-09-15 12:48:20

标签: c multithreading pthreads thread-synchronization

我对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的任何示例?

提前致谢。

1 个答案:

答案 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 $。

在现实世界中,这种线程的可能用途是当一个人获得输入(例如电影片名)而另一个产生输出(流式传输电影)时。