0

我是 pthread 编程的新手。我正在编写一个示例代码,我想在其中传输 pthread_cond_signal() 中的变量,如下所示

pthread_t th1,th2;
pthread_cond_t con1 = PTHREAD_COND_INITIALIZER;
pthread_cond_t con2 = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void* fun(void *gh)
{
    pthread_mutex_lock(&mutex);
    flag=1;
    pthread_cond_wait(&con1,&mutex);
    printf("This is test\n");
    pthread_mutex_unlock(&mutex);
}

int main()
{
    char *s;
    int a;
    s=malloc(sizeof(char)*4);
    printf("Enter thread Number \n");
    scanf("%d",&a);
    sprintf(s,"con%d",a);
    pthread_create(&th1,NULL,fun,NULL);
    sleep(1);
    while(flag==0) //wait until pthread_cond_wait is called  
    {}
    pthread_mutex_lock(&mutex);
    pthread_cond_signal((pthread_cond_t *)s);
    pthread_mutex_unlock(&mutex);
    pthread_join(th1,NULL);
    pthread_join(th2,NULL);
    return 0;
}
4

1 回答 1

1

您正在使用线程。一个程序的所有线程彼此共享内存。问题不是从其他线程读取变量。问题在于以正确的顺序阅读它们:不是半更新、过时或来自未来。

解决这个问题是互斥体、信号量和条件的全部原因。

您要做的不是通过 pthread_cond_signal 传递值。您所做的是将值设置到两个线程都可以读取然后发送信号的一些内存中。

我不得不想知道为什么你认为这pthread_cond_signal((pthread_cond_t *)s)会奏效?s不是,也从来不是,一个条件。Apthread_cond_t不是您传递的值。它是 POSIX 线程库用来跟踪条件状态的结构。

于 2013-10-07T17:19:11.960 回答