gpt4 book ai didi

c - 静态互斥和多线程

转载 作者:太空狗 更新时间:2023-10-29 15:26:35 25 4
gpt4 key购买 nike

如果我在函数中将互斥量声明为静态的,并使用该互斥量来锁定某个变量。该互斥体是否在线程之间“共享”,例如,我可以使用一些更简洁的代码来摆脱困境?

将字符串附加到双指针 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;

}

最佳答案

是的,一个静态初始化的互斥锁在线程之间共享——否则它不会很有用。 PTHREAD_MUTEX_INITIALIZER 专为像您这样的用例而设计。

请注意,您需要在锁定互斥体后增加i。如编辑前所写,代码包含数据竞争(本身未定义的行为),并且如果多个线程并行执行它,则可能会出现竞争条件。

关于c - 静态互斥和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com