【问题标题】:static pthread spinlock initialization exists?静态 pthread 自旋锁初始化是否存在?
【发布时间】:2013-10-05 10:01:30
【问题描述】:

是否有用于 pthread 自旋锁的静态初始化程序?我看了pthread.h,好像没有。

我正在寻找类似于 PTHREAD_MUTEX_INITIALIZER 的东西。

【问题讨论】:

  • @MohsenPahlevanzadeh 你能详细说明一下吗?谢谢!
  • header files 上定义的一些常量或宏,但其中一些在库中定义,当在 win 中的库 *.dll 或 unix 世界中的 .so 中定义时,您无法访问它们。
  • 好的。那么,在 libpthread.so 中是否定义了 pthread 自旋锁的静态初始化程序?谢谢。
  • 如果在标题中找不到是。
  • 那我可以知道宏名是什么吗?

标签: c linux gcc pthreads


【解决方案1】:

您可以使用构造函数和析构函数(在 gcc 和 clang 中可用)

#include <pthread.h>
#include <stdlib.h>

static pthread_spinlock_t lock;

__attribute__((constructor))
void lock_constructor () {
    if ( pthread_spin_init ( &lock, 0 ) != 0 ) {
        exit ( 1 );
    }
}

int main () {
    if (
        pthread_spin_lock   ( &lock ) != 0 ||
        pthread_spin_unlock ( &lock ) != 0
    ) {
        return 2;
    }
    return 0;
}

__attribute__((destructor))
void lock_destructor () {
    if ( pthread_spin_destroy ( &lock ) != 0 ) {
        exit ( 3 );
    }
}

【讨论】:

  • 这是一个非常有趣的。不知道有这样的功能。感谢分享这个技巧!
【解决方案2】:

不,定义静态初始化器的唯一 POSIX 控制结构似乎是互斥锁、条件和读写锁。

【讨论】:

  • 是的,这也是我目前发现的。 Moshen 的评论让我觉得 pthread 开发人员的编码习惯不好——将一个打算供外部用户使用的宏放在 .c/.cpp 中。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2014-10-06
  • 2017-11-10
相关资源
最近更新 更多