【发布时间】:2011-07-04 08:35:02
【问题描述】:
我正在维护一个库,该库具有需要线程特定变量的函数。 由于 gcc 4.2 中的错误,如果我定义 x中的静态__thread; 当库函数通过 PERL 中的未命名 API 调用时,它会挂起。
我想使用 pthread_key_create() 定义线程局部变量,但我需要这样做 在库中,创建线程时我没有收到任何特殊调用。
如果线程局部变量不存在,如何创建它? 类似的东西
pthread_key_t tlsKey = 0;
int x;
myfunc()
{
if (pthread_key_t == 0){
pthread_key_create(&tlsKey, NULL);
pthread_setspecific(tlsKey, &x);
}
int& myx = pthread_getspecific(tlskey);
if (myx == 0){
myx=1;
something_under_myx_lock();
myx = 0;
} else {
cout << "locked in thread\n";
}
}
注意:如果您想知道,我需要在线程内加锁的原因是为了使这个函数信号安全,以及线程安全。
【问题讨论】: