假设我有两个线程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()将被执行多少次。
答案 0 :(得分:1)
如果一个线程在另一个线程正在执行t2_callback()
并且持有锁时调用t1_callback()
,那么它(运行t2_callback()
的线程)将被暂停在pthread_mutex_lock();
中直到锁定被释放。因此,在保持锁定的情况下,谈论一个线程调用t2_callback()
10次是没有意义的。
如果10个不同的主题在这段时间内都调用了t2_callback()
,那么它们将全部暂停在pthread_mutex_lock();
中,并且当锁被释放时它们将一次一个地进行