如果我在函数中将互斥锁声明为静态并使用该互斥锁来锁定某个变量。是互斥共享'线程之间,例如,我可以使用一些更干净的代码逃脱?
将字符串附加到双指针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;
}
答案 0 :(得分:6)
是的,在线程之间共享一个静态初始化的互斥锁 - 否则它将不会非常有用。 PTHREAD_MUTEX_INITIALIZER
专为像您这样的用例而设计。
请注意,锁定互斥锁后需要增加i
。如上所述,如果两个线程并行执行,则代码具有竞争条件。