使用pthreads,如何在C中初始化一个静态的互斥量数组?
对于单个静态互斥锁,似乎我可以使用PTHREAD_MUTEX_INITIALIZER。 但是它们的静态数组呢? 例如,在
#include #define NUM_THREADS 5 / *初始化静态互斥arrays* / static pthread_mutex_t互斥锁[NUM_THREADS] = ...?
或者必须动态分配?
如果您有符合C99的编译器,可以使用P99进行初始化:
static pthread_mutex_t mutexes[NUM_THREADS] = { P99_DUPL(NUM_THREADS, PTHREAD_MUTEX_INITIALIZER) };
这只是重复所请求次数的令牌序列PTHREAD_MUTEX_INITIALIZER,
。
为此,您只需确保NUM_THREADS
不会扩展为变量,而是扩展为预处理器可见且不会太大的十进制整数常量。
不,您不必动态创建它们。 您可以使用静态数组,只需在使用它们之前设置它们。 你可以做:
#define NUM_THREADS 5 static pthread_mutex_t mutexes[NUM_THREADS] = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER };
如果您更改了NUM_THREADS
,则容易出错,但可以通过以下方式修复:
static pthread_mutex_t mutexes[] = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER }; #define NUM_THREADS (sizeof(mutexes)/sizeof(*mutexes))
或者,您可以使用代码执行此操作,例如:
#define NUM_THREADS 5 static pthread_mutex_t mutexes[NUM_THREADS]; // Other stuff int main (void) { for (int i = 0; i < NUM_THREADS; i++) pthread_mutex_init(&mutexes[i], NULL); // Now you can use them safely. return 0; }
在所有这些情况下,在您尝试使用它们之前,它们已正确设置。 事实上,在你做任何线程之前我会做得很好,但那只是我偏执狂。
需要了解更多c/c++开发分享静态pthreads互斥初始化,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享静态pthreads互斥初始化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979960.html