c - pthread_mutex_lock 导致死锁

标签 c locking pthreads

我正在使用上面的代码使用 2 个线程递增计数器,这两个线程独立地获取 mut 锁和递增计数器。线程进入此函数后,我面临死锁。

 pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

 void *increment_counter(void *counter_addr)
{
    int max = MAX_COUNTER_VALUE;
    int iter;
    int counter;

    for(iter=0;iter< max ;iter++)
   // LOCK  
    pthread_mutex_lock(&mut);
    counter++;
    // UNLOCK 
    pthread_mutex_unlock(&mut);
    return NULL; 
}

谁能告诉我到底哪里出错了?

最佳答案

您正在尝试锁定互斥体 max 次,然后递增 counter 并释放一次。

尝试:

for(iter=0;iter< max ;iter++)
{
  // LOCK  
  pthread_mutex_lock(&mut);
  counter++;
  // UNLOCK 
  pthread_mutex_unlock(&mut);
}
return NULL; 

关于c - pthread_mutex_lock 导致死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12650595/

相关文章:

c - powerpc 交叉编译器的 pthread_equal() 替代方案?

c++ - 如何在 Linux 上的 C++ 中包含 <atomic>?

c - 字符串中最后一次出现的字符

php - mySQL - 使用 mysqli 应用行级锁

c++ - 为什么 std::lock 不支持超时?

mysql - 多个对象持有共享锁,想升级为独占锁,sql中基于锁的并发控制是如何实现的?

java - 并发:缓存一致性问题还是编译器优化?

c - 进程已完成,退出代码为 11 | malloc 期间出错

c++ - 是否可以强制说 `gcc` 为 C 和 C++ 中的相同源代码片段生成相同的二进制文件?

c - 是否可以删除/proc/<pid>/fd中的fd链接?