问题标签 [pthread-key-create]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1541 浏览

c++ - 主线程的销毁顺序和pthread_key_create的使用

我想知道使用pthread_key_createwhile 传入析构函数。

我想要这样的东西:

显然我遗漏了相当多的细节。

对于不是主线程的任何线程,这显然很好(提供锁定等),并且每当线程死亡时,我的workoncomplex函数就会被调用并操作foo对象。

我的问题是,这对主线程是否有效,因为显然pthreadkey析构函数的调用发生在线程结束时,但它是否保证在静态被破坏之前运行?如果是这样,我是否必须检查我是否在主线程中并立即返回?或者我可以只对所有线程一视同仁,并假设我的静态对象仍然存在。

0 投票
3 回答
276 浏览

c - 线程特定数据

我有一个如下的客户端程序,我需要使它成为多线程的,即每个连接一个线程。但是变量 sockfd 对于一个线程来说是全局的。我知道要做到这一点,我需要使用 pthread_key_t、pthread_key_create...等。但是,我很困惑如何使用它。如果有任何帮助,我将不胜感激。

我已经为一个线程执行了程序并且工作正常。但是当我将线程数增加到一个以上时,它当然不起作用,因为全局变量 sockfd。这是一个更大的测试程序。

谢谢并恭祝安康

0 投票
1 回答
5563 浏览

pthreads - pthread_key_t 和 pthread_key_create 方法是如何工作的?

我在弄清楚 pthread_key_t 和 pthread_key_create 如何工作时遇到了一些麻烦。据我了解,每个线程都有 TLS(线程本地存储),并且一个密钥用于访问线程本地存储。我没有得到的是当一个密钥被创建时,每个线程都可以使用它吗?假设线程 0 创建密钥 0,线程 1 可以使用密钥 0 吗?如果线程 1 使用密钥 0,它会访问自己的 TLS 还是线程 0 的 TLS?

是否有一些全局数组或跟踪所有正在使用的键的东西?

0 投票
1 回答
655 浏览

c - 我不明白使用 pthread_key_create 的原因,你能说出原因吗?

我们可以在使用 pthread_create /(not key_ )时将参数传递给线程,如果它超过了使用每个线程的值。如果关于使用静态存储,我们使用互斥锁,那么,我们使用 pthread_key_create 是什么意思?举例并强调它为什么诞生(应用和需要它)?我听说它对于迁移单线程应用程序很有用,但它们仍然使用互斥锁。那么,重点是什么?

谢谢!

0 投票
1 回答
9941 浏览

multithreading - 如何正确使用线程特定的数据

我正在使用 pthread 编程。我需要一个全局变量,它对不同的线程具有不同的值。并且线程将使用相同的函数来处理这个变量,例如改变它的值。如果一个线程改变了它的值,其他线程中的值不会改变。所以我尝试使用线程特定的数据,并写了一个例子。我需要将 pthread 操作包装在函数中。例如:setspecific()、changedata、printdata()、create_key()、delete_key() 等。

我创建了两个线程。当我让一个线程休眠 2 秒时。我得到正确答案。

当我评论 /* sleep(2); */ ,我得到不正确的答案。

我想在没有线程的情况下获得正确的结果。一个线程不应该等待另一个线程完成调用 pthread_setspecific() ,对吗?我该怎么办?感谢您的考虑。我将 struct_data 定义为全局变量是否正确?任何人都可以帮助我吗?

0 投票
1 回答
216 浏览

multithreading - 为什么在 glibc 的 NPTL 实现中访问 pthread 键的序列号不同步?

最近研究glibc中线程本地存储是如何实现的,发现如下代码,实现了APIpthread_key_create()

__pthread_keys是所有线程访问的全局数组。我不明白为什么其成员的读取seq不同步,如下所示:

虽然它在以后修改时是同步的。

仅供参考,__pthread_keys是一个类型为 的数组struct pthread_key_struct,其定义如下:

提前致谢。

0 投票
1 回答
815 浏览

c - 分段错误或 SizeOf 未正确使用

所以我正在开发一个程序,我使用 pthreads 来并行解决问题。现在,当我在函数中运行以下代码时出现段错误:average_power。

这是代码的相关部分,我很确定错误在某处:

这就是工作函数以及从另一个函数的这一部分传递给它的结构参数,其中线程被初始化并给出指令:

因此,当在 *worker 结束时调用 average_power 时,我得到的错误是其中一个线程内的段错误(average_power 是正确的,我已经证明了这一点),或者当我取消注释以下行时出现错误我的初始化数组的循环。

我想确保 outputNew 在放入 arg 结构之前有自己的空间,这样它就不会被覆盖,但是这一行使它无法编译。我这样做不正确吗?否则,average_power 从 args 结构访问此变量(输出),并且在发生这种情况时会出现段错误,我认为这意味着某处的某些内存未正确使用?对不起,如果这太长了,如果我说得不够好,我可以澄清任何部分。所有其他函数或对事物的调用都与我的项目有关,我知道这些是正确的,我的错误来自我的 pthread 实现并将数据传递到某个地方。

0 投票
2 回答
794 浏览

pthreads - 如果在 pthread_key_create 失败后对密钥调用 pthread_key_delete 会发生什么?

假设以下代码:

如果pthread_key_create失败,是否调用pthread_key_delete被认为未定义的行为?如果怎么办pthread_key_create被注释掉怎么办?

POSIX 标准的pthread_key_delete部分指出:

pthread_key_delete() 函数应删除先前由 pthread_key_create() 返回的线程特定数据键。

由于期望由先前返回pthread_key_delete特定于线程的数据键,我担心调用未返回的键会导致未定义的行为。pthread_key_createpthread_key_deletepthread_key_create

0 投票
2 回答
62 浏览

c - 在 C 语言中,当在 pthread_create 中使用函数名时,它与使用引用相同吗?

我不确定我说的是否正确。

我正在学习线程,如果您可以提供一个使其变得非常简单的网站或视频,那就太好了。线程 - 锁、条件变量等。谢谢!

0 投票
0 回答
80 浏览

multithreading - pthread_create() 期间的分段错误

好的,所以我试图在一个单独的线程(主线程和我使用 pthread_create 创建的辅助线程)中对两个文件进行冒泡排序。我的冒泡排序工作得很好,我测试了好几次,所以我没有包括在这里,我的问题是在 pthread_create 行期间给了我分段错误。

我有一个冒泡排序函数,它读取文件并对其进行排序。完美运行。void *bubblesortCars(char *文件名)

这是给我分段错误的问题

但是,如果我这样说,它将完美地工作,但我不想这样做,因为我希望两个线程同时进行冒泡排序: