c/c++语言开发共享静态pthreads互斥初始化

使用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++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/979960.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐