【问题标题】:Number of times the waiting thread will be executed等待线程将被执行的次数
【发布时间】:2014-12-07 16:52:03
【问题描述】:

假设我有两个线程 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()会执行多少次。

【问题讨论】:

    标签: multithreading thread-safety pthreads threadpool


    【解决方案1】:

    如果一个线程调用t2_callback(),而另一个线程正在执行t1_callback()并持有锁,它(运行t2_callback()的线程)将在pthread_mutex_lock();中挂起,直到锁被释放。所以说一个线程在持有锁时调用t2_callback() 10 次是没有意义的。

    如果此时有 10 个不同的线程都调用了t2_callback(),它们都将在pthread_mutex_lock(); 中被挂起,并且在释放锁时它们将各自进行一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2015-02-22
      • 1970-01-01
      • 2018-09-19
      • 2021-04-03
      • 1970-01-01
      • 2021-05-14
      相关资源
      最近更新 更多