相关疑难解决方法(0)

检查pthread互斥锁是锁定还是解锁(线程锁定后)

我需要查看一个互斥锁是否在if语句中被锁定或解锁,所以我这样检查它...

if(mutex[id] != 2){
    /* do stuff */
}
Run Code Online (Sandbox Code Playgroud)

但是当我检查它时,gcc给了我以下错误:

error: invalid operands to binary != (have 'ptherad_mutex_t' and 'int')

那么我该如何检查互斥锁是否被锁定?

编辑:

我的问题的一个关键组成部分是我的线程(按设计)在将控制传递给另一个线程后立即锁定自己.因此,当线程A将控制传递给线程B时,线程A被锁定,线程B执行某些操作,然后当线程B完成时,它将解锁线程A.

这样做的问题是,如果线程B尝试解锁线程A并且线程A尚未完成锁定,则解锁的调用将丢失,线程A保持锁定状态,从而导致死锁.

更新:

我根据caf的建议重新制作了我的程序,但我仍遇到问题.我已经将我的程序模拟到了尽可能最好的结构caf中,但我现在甚至无法分辨出导致死锁的原因...我在这里创建了一个新问题,寻求我的代码帮助.

下面是caf的建议的可运行版本.我在线程a的函数中做了一个小的重新排序,没有它,线程a和线程b都会在创建时被锁定,等待一个永远不会改变的条件.

#include <pthread.h>

int run_a = 0;
pthread_mutex_t lock_a = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_a = PTHREAD_COND_INITIALIZER;

int run_b = 0;
pthread_mutex_t lock_b = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_b = PTHREAD_COND_INITIALIZER;

void *a(void *);
void *b(void *);

int main(){
    int status;
    pthread_t thread_a;
    pthread_t thread_b;

    pthread_create(&thread_a, NULL, a, (void *)0);
    pthread_create(&thread_b, NULL, b, (void …
Run Code Online (Sandbox Code Playgroud)

c mutex deadlock pthreads

14
推荐指数
2
解决办法
5万
查看次数

标签 统计

c ×1

deadlock ×1

mutex ×1

pthreads ×1