静态互斥和多线程

Joh*_*ith 4 c multithreading pthreads

如果我在函数中将互斥锁声明为静态并使用该互斥锁来锁定某个变量.这个互斥体是否在线程之间"共享",例如我可以使用一些更干净的代码逃脱?

将字符串附加到双指针char类型的示例,我想从多个线程调用这样的东西:

void func(char *msg) {
    static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
    static char **buffer;
    static unsigned int i=0;

    pthread_mutex_lock(&mtx);
    buffer = realloc(++i * sizeof(char *));
    buffer[i-1] = realloc(strlen(msg) + 1);
    strcpy(buffer[i-1], msg);
    pthread_mutex_unlock(&mtx);

    return;

}
Run Code Online (Sandbox Code Playgroud)

use*_*342 6

是的,在线程之间共享静态初始化的互斥锁 - 否则它将不会非常有用.PTHREAD_MUTEX_INITIALIZER专为像您这样的用例而设计.

请注意,i锁定互斥锁后需要递增.如上所述,如果两个线程并行执行,则代码具有竞争条件.