标签: pthreads

如何在Linux pthreads中设置线程的名称?

有没有办法在Linux中设置线程的名称?

我的主要目的是在调试时提供帮助,如果通过例如公开这个名称也很好 /proc/$PID/task/$TID/...

c linux pthreads

57
推荐指数
3
解决办法
5万
查看次数

Pthreads与OpenMP

我正在使用Linux在C中创建一个多线程应用程序.

我不确定是否应该使用POSIX线程API或OpenMP API.

使用任何一种的利弊是什么?

编辑:

有人可以澄清两个API是否创建内核级用户级线程?

c pthreads openmp

57
推荐指数
4
解决办法
4万
查看次数

如何在pthreads中增加线程优先级?

我在Linux中使用pthread.我想通过设置参数来增加线程优先级sched_param.priority.但是,我无法从网上找到关于我可以设置的线程优先级范围或线程优先级描述的信息.

另外,我想了解相对线程优先级,因为我不希望将线程优先级设置得太高并导致操作系统停止.有人可以帮我吗?

c++ linux multithreading pthreads

56
推荐指数
3
解决办法
9万
查看次数

我可以让Unix的pthread.h在Windows中编译吗?

如果我尝试编译程序

#include <pthread.h>
Run Code Online (Sandbox Code Playgroud)

在其中,我收到错误:

pthread.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

是否有可能在Windows环境中编译?

我正在使用Vista与最新的MinGW.

我不想使用Microsoft Windows Services for UNIX Version 3.5,因为我必须将其移至Unix环境.

c windows multithreading pthreads

55
推荐指数
3
解决办法
12万
查看次数

Detached vs. Joinable POSIX线程

我一直在使用该pthread库来创建和连接C中的线程.

  1. 我应该何时从一开始就创建一个脱离的线程?与可连接线程相比,它是否提供任何性能优势?

  2. pthread_join()在连接(默认情况下)线程上不执行操作是否合法?或者这样的线程是否应该始终使用该detach()功能pthread_exit()

c linux pthreads detach

55
推荐指数
2
解决办法
3万
查看次数

OS X上的sem_init

我正在研究一些使用pthread和信号量库的代码.该sem_init功能在我的Ubuntu机器上运行正常,但在OS X上该sem_init功能完全没有效果.图书馆有什么问题,或者有不同的方式吗?这是我用来测试的代码.

sem_t sem1;
sem_t sem2;
sem_t sem3;
sem_t sem4;
sem_t sem5;
sem_t sem6;

sem_init(&sem1, 1, 1);
sem_init(&sem2, 1, 2);
sem_init(&sem3, 1, 3);
sem_init(&sem4, 1, 4);
sem_init(&sem5, 1, 5);
sem_init(&sem6, 1, 6);
Run Code Online (Sandbox Code Playgroud)

值似乎是随机数,并且在sem_init调用后它们不会更改.

c macos semaphore pthreads

54
推荐指数
2
解决办法
3万
查看次数

哪个更有效,基本的互斥锁或原子整数?

对于像计数器那样简单的东西,如果多个线程将增加数量.我读到互斥锁会降低效率,因为线程必须等待.所以,对我来说,一个原子计数器将是最有效的,但我在内部读到它基本上是一个锁?所以我想我很困惑如何比另一个更有效率.

multithreading operating-system mutex pthreads atomic

53
推荐指数
5
解决办法
3万
查看次数

你如何查询pthread以查看它是否仍在运行?

在我的析构函数中,我想干净地销毁一个线程.

我的目标是等待线程完成执行然后破坏线程.

我发现查询pthread状态的唯一事情是pthread_attr_setdetachstate,但这只会告诉你你的线程是:

  • PTHREAD_CREATE_DETACHED
  • PTHREAD_CREATE_JOINABLE

这两者都与线程是否仍在运行无关.

你如何查询pthread以查看它是否仍在运行?

c concurrency multithreading destructor pthreads

52
推荐指数
4
解决办法
8万
查看次数

抢先线程与非抢占线程

有人可以解释先发制人线程模型和非先发制人线程模型之间的区别吗?

据我了解:

  • 非抢占式线程模型: 一旦线程启动,它就无法停止,或者在线程完成其任务之前无法将控制权转移到其他线程.
  • 抢占式线程模型:允许运行时随时介入并从一个线程手动控制到另一个线程.优先级较高的线程优先于优先级较低的线程.

有人可以请:

  1. 解释理解是否正确.
  2. 解释两种模型的优缺点.
  3. 什么时候使用什么将是非常有帮助的一个例子.
  4. 如果我在Linux(系统v或Pthread)中创建一个线程而没有提到任何选项(有没有?)默认情况下使用的线程模型是抢占式线程模型?

unix linux multithreading pthreads

51
推荐指数
3
解决办法
2万
查看次数

是否有无效的pthread_t id?

我想为给定的线程id调用pthread_join,但前提是该线程已经启动.安全的解决方案可能是添加一个变量来跟踪哪个线程在哪里开始.但是,我想知道是否可以检查pthread_t变量,如下面的代码.

pthread_t thr1 = some_invalid_value; //0 ?
pthread_t thr2 = some_invalid_value;

/* thread 1 and 2 are strated or not depending on various condition */
....

/* cleanup */
if(thr1 != some_invalid_value)
    pthread_join(&thr1);

if(thr2 != some_invalid_value)
    pthread_join(&thr2);
Run Code Online (Sandbox Code Playgroud)

其中some_invalid_value可以是0,或者是依赖于实现的'PTHREAD_INVALID_ID'宏

PS:我的假设是pthread_t类型具有可比性和可分配性,基于的假设

PPS:我想这样做,因为我认为在无效的线程id上调用pthread_join是未定义的行为.它不是.但是,加入以前加入的线程是未定义的行为.现在让我们假设重复调用上面的"函数".无条件地调用pthread_join并检查结果可能会导致在先前连接的线程上调用pthread_join.

linux pthreads

51
推荐指数
2
解决办法
2万
查看次数