在pthread_cond_timedwait和pthread_mutex_lock上崩溃

时间:2019-07-30 15:30:41

标签: multithreading mutex

这是线程A代码。

void sleep(Data x)
{
    pthread_mutex_lock( &(X->lock) );
    struct timeval  _T;
    gettimeofday( &_T, 0 );
    T.tv_sec = _T.tv_sec;
    T.tv_nsec = 1000 * _T.tv_usec;
    pthread_cond_timedwait( &(x->condition), &(x->lock), &T );
    x->value = 0;
    pthread_mutex_unlock( &(x->lock) );
}

下面是线程B代码

void wakeup(Data y)
{

    pthread_mutex_lock( &(y->lock) );
    y->value = 1;
    pthread_cond_signal( &(y->condition) );
    pthread_mutex_unlock( &(y->lock) );
}
struct Data {
    pthread_cond_t  condition;
    pthread_mutex_t lock;
    int             value;
} ;

我在多线程系统中面临崩溃。根据bt,其中一个线程(A)显示在pthread_cond_timedwait中,而另一个线程(B)显示在pthread_mutex_lock中。线程B获得了一些数据来唤醒线程A。 崩溃与超时pthread_cond_timedwait传递的时间同时发生。崩溃显示在线程B中。每个bt值为“ 0”。

在代码部分,请不要查找语法错误。所有变量均已正确初始化

0 个答案:

没有答案