等待线程执行的次数

时间:2014-10-13 07:11:54

标签: multithreading thread-safety pthreads threadpool

假设我有两个线程T1和T1。

线程T1将调用t1_callback(),T2正在调用t2_callback()

T some_global_data;
pthread_mutex_t mutex;

void t1_callback()
{
    pthread_mutex_lock(&mutex);
    update_global_data(some_global_data);
    pthread_mutex_unlock(&mutex);
}

void t2_callback()
{
    pthread_mutex_lock(&mutex);
    update_global_data(some_global_data);
    pthread_mutex_unlock(&mutex);
}

案例

t1_callback()在时间(t1-t2)之间保持锁定。 在这个时间(t1-t2)之间,如果t2_callback已经被调用了10次。

问题

t1_callback()释放互斥锁时,t2_callback()将被执行多少次。

1 个答案:

答案 0 :(得分:1)

如果一个线程在另一个线程正在执行t2_callback()并且持有锁时调用t1_callback(),那么它(运行t2_callback()的线程)将被暂停在pthread_mutex_lock();中直到锁定被释放。因此,在保持锁定的情况下,谈论一个线程调用t2_callback() 10次是没有意义的。

如果10个不同的主题在这段时间内都调用了t2_callback(),那么它们将全部暂停在pthread_mutex_lock();中,并且当锁被释放时它们将一次一个地进行