问题标签 [pthreads]

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 回答
302 浏览

multithreading - 等效于 MSVC/Windows 中的“pthread_rwlock_timedrdlock()”和“pthread_rwlock_timedwrlock()”

在 Windows(MSVC)中遵循 POSIX 定时读取器/写入器锁的等价物是什么?

  • pthread_rwlock_timedrdlock()
  • pthread_rwlock_timedwrlock()
0 投票
5 回答
11697 浏览

c++ - PThread 是多平台 C/C++ 多线程程序的好选择吗?

在过去五年中,主要从事 Java 和 .NET 的一些工作,并且在那段时间没有编写任何重要的 C 或 C++。所以已经离开那个场景一段时间了。

如果我今天想编写一个 C 或 C++ 程序,它执行一些多线程并且源代码可在 Windows、Mac OS X 和 Linux/Unix 之间移植——PThread 是一个不错的选择吗?

C 或 C++ 代码不会执行任何 GUI,因此无需担心任何这些。

不过,对于 Windows 平台,我不想带太多 Unix 包袱,就 unix 仿真运行时库而言。更喜欢适用于 Windows 的 PThread API,它是现有 Windows 线程 API 的尽可能薄的包装器。

附录编辑:

我倾向于使用 boost:thread - 我也希望能够使用 C++ try/catch 异常处理。即使我的程序相当小而且不是特别 OOPish,我还是喜欢使用类和命名空间来封装——而不是 C 的非实体函数。

0 投票
5 回答
14737 浏览

pthreads - pthread 条件变量

我正在实现一个带有任务队列的线程。一旦第一个任务被添加到队列中,线程就开始运行它。

我应该使用 pthread 条件变量来唤醒线程还是有更合适的机制?

如果我pthread_cond_signal()在另一个线程没有被阻塞pthread_cond_wait()而是在做某事时调用,会发生什么?信号会丢失吗?

0 投票
1 回答
336 浏览

c - 这种僵局隐藏在哪里?

我实际上正在编写一个 MPI 程序。这是一个基本的客户端/服务器模式。服务器有一组工作要计算。客户得到这个大集合的子集。每个客户端使用多个线程来计算子集。在向服务器请求另一个子集之前,我必须确保所有线程都已完成。

客户端分为几个线程:一个主线程(用于通信)和几个工作线程。

这是我的实际代码,应该发生死锁。我清除了任何 MPI 调用,使其更具可读性。我真的看不出我在这里做错了什么。

0 投票
5 回答
2248 浏览

c++ - 线程安全队列有问题吗?

我正在尝试使用 c++ 中的 pthreads 编写线程安全队列。我的程序在 93% 的时间里都能正常工作。另外 7% 的时间它会吐出垃圾,或者似乎睡着了。我想知道我的队列中是否存在上下文切换会破坏它的缺陷?

这可以像这样使用:

如果有人看到这个问题,请说出来:)

0 投票
1 回答
1622 浏览

linux - Static linking with pthreads & stdc++?

Is it possible to statically link my program with libpthreads and libstdc++ on Linux?

0 投票
3 回答
6948 浏览

linux - 如何在 Linux/gcc 上创建与 pthreads 和 libstdc++ 静态链接的共享对象?

如何在 Linux/gcc 上创建与 pthreads 和 libstdc++ 静态链接的共享对象?

0 投票
2 回答
2486 浏览

c - C:pthread dataspecific 是如何工作的?

我不确定 pthread dataspecific 是如何工作的:考虑到下一个代码(在网上找到),这是否意味着我可以在主线程中创建例如 5 个线程,只在其中一些线程中调用 func(比如说 2 ) 这些线程会将数据“键”设置为某个值 (ptr = malloc(OBJECT_SIZE) ),而其他线程将具有相同的键,但具有 NULL 值?

关于数据特定的工作原理以及它如何在 pthread 中实现(简单方式)的一些解释将不胜感激!

0 投票
5 回答
81188 浏览

c - 如何从任意 pthread_t 获取线程 ID?

我有一个 pthread_t,我想更改它的 CPU 亲和力。问题是我使用的是 glibc 2.3.2,它没有pthread_setaffinity_np()。不过没关系,因为 pthread_setaffinity_np() 本身就是sched_setaffinity()的包装器,可以通过传递线程 ID 而不是进程 ID 来调用它来设置任意线程的亲和性。

但是...... sched_setaffinity 可以使用的线程 id 是操作系统线程 id,您可以从gettid()系统调用中获得这种类型。这与不透明类型 pthread_t 不同,gettid() 只会返回当前线程的线程 ID 。我需要能够设置任意线程的 CPU 亲和性。

不幸的是,我无法访问 pthread 的私有部分,这会让我通过将 pthread_t 强制转换为 a 来窃取线程 ID struct pthread *。我猜这样会更好,因为依赖私有实现会带来更多麻烦。

我也一直在阅读pthread_getunique_np函数,但是这会返回一个“唯一的整数标识符”——我不相信它在任何形状或形式上都等同于操作系统线程 ID。

因此,问题是:如何从任意 pthread_t 获取线程 ID?

0 投票
3 回答
1550 浏览

multithreading - pthreads - 如何并行化作业

我需要并行化一个简单的密码破解程序,以便在 n 处理器系统上使用它。我的想法是创建 n 个线程并在它们完成时为它们提供越来越多的工作。

知道线程何时完成的最佳方法是什么?互斥体?在其他线程运行时不断检查这个互斥锁不是很昂贵吗?