Pthread等待僵局

时间:2016-04-28 15:45:59

标签: c pthreads

我是C的新手并试用条件关键区域。我在几个关于Wait()和Signal()的网站上读到了,但我无法弄清楚我的问题是什么。希望这里有人可以指出我正确的方向,我在这里做错了。

我正在尝试在我的示例程序中创建两个线程。线程1将为String stuff分配一个值,而Thread 2将打印String的信息。

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

pthread_mutex_t mutex;
pthread_cond_t cond;
void Lock(pthread_mutex_t m);
void Unlock(pthread_mutex_t m);
void Wait(pthread_cond_t t, pthread_mutex_t m);
void Signal(pthread_cond_t);
void Broadcast(pthread_cond_t t);
void* First(void* args);
void* Second(void* args);

char* stuff;

int main(int argc, char** argv){
    pthread_t r1, r2;
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&cond, NULL);
    if(pthread_create(&r1, NULL, First, NULL))
        fprintf(stderr,"Error\n");

    if(pthread_create(&r2, NULL, Second, NULL))
        fprintf(stderr, "Error\n");

    pthread_join(r1, NULL);
    pthread_join(r2, NULL);

}

void* First(void* args){
    Lock(mutex);
    stuff = "Processed";
    usleep(500000);
    Broadcast(cond);
    Unlock(mutex);
    pthread_exit(NULL);
    return NULL;
}

void* Second(void* args){
    Lock(mutex);
    Wait(cond, mutex);
    usleep(500000);
    printf("%s", stuff);
    Unlock(mutex);
    pthread_exit(NULL);
    return NULL;
}

void Lock(pthread_mutex_t m){
    pthread_mutex_lock(&m);
}

void Unlock(pthread_mutex_t m){
    pthread_mutex_unlock(&m);
}

void Wait(pthread_cond_t t, pthread_mutex_t m){
    pthread_cond_wait(&t, &m);
}

void Signal(pthread_cond_t t){
    pthread_cond_signal(&t);
}

void Broadcast(pthread_cond_t t){
    pthread_cond_broadcast(&t);
}

执行此代码时遇到死锁,但我不确定原因。 GDB提到它在Wait()停止,但我不知道为什么。

0 个答案:

没有答案