66得票3回答
在OS X上使用sem_init

我正在处理一些使用pthread和semaphore库的代码。在我的Ubuntu机器上,sem_init函数工作正常,但是在OS X上,sem_init函数完全没有效果。这个库有问题吗?还是有其他方法可以实现?以下是我用来测试的代码。sem_t sem1; sem_t sem2; sem_t ...

66得票12回答
创建线程时有多少开销?

我刚刚审查了一些非常糟糕的代码,这些代码通过创建新线程来在串行端口发送消息,为每个发送的消息创建一个新线程来打包和组装消息。是的,针对每个消息都会创建一个pthread,正确设置位,然后线程终止。我不知道为什么有人会这样做,但它引发了一个问题 - 实际上创建线程时有多少开销?

65得票13回答
如何打印pthread_t

搜索过,但没有找到令人满意的答案。 我知道没有一种便携式的方法来打印pthread_t。 您是如何在应用程序中实现的? 更新: 实际上,我不需要pthread_t,而只是一些小的数字ID,在调试消息中标识不同的线程。 在我的系统(64位RHEL 5.3)中,它被定义为无符号长整型,因...

61得票6回答
Pthread库实际上是一种用户级线程解决方案吗?

我的问题可能不够清晰,因为我不知道如何明确定义。 我了解Pthread是符合POSIX标准的线程库(关于POSIX,可参见维基百科:http://en.wikipedia.org/wiki/Posix)。它在类Unix操作系统中可用。 关于线程,我了解到有三个不同的模型: 用户级线程:内...

61得票7回答
你如何查询 pthread 是否仍在运行?

在我的析构函数中,我想要干净地销毁一个线程。 我的目标是等待线程执行完毕,然后再销毁该线程。 关于查询 pthread 状态的唯一信息是 pthread_attr_setdetachstate,但这只能告诉你线程是否为: PTHREAD_CREATE_DETACHED PTHREAD_...

60得票10回答
在Linux中何时使用pthread_exit(),何时使用pthread_join()?

我是新手,正在尝试了解pthreads。我看到了一些像下面这样的例子。 我可以看到main()被APIpthread_exit()阻塞,我也见过一些例子,其中主函数被APIpthread_join()阻塞。我不明白什么时候使用什么? 我参考了以下网站-https://computing.lln...

59得票2回答
绿色线程和Python中的线程

根据维基百科所述: 绿色线程是一种模拟多线程环境的方式,不依赖于任何本地操作系统功能,并且它们在用户空间中管理而不是内核空间中,使它们能够在没有原生线程支持的环境中工作。 Python的线程使用pthreads(内核线程)实现,并且由于全局解释器锁(GIL)的存在,Python进程...

58得票8回答
是否存在无效的pthread_t id?

我想要针对一个给定的线程ID调用pthread_join,但仅在该线程已经启动时才进行。安全的解决方案可能是添加一个变量来跟踪哪个线程是否已经启动。不过,我想知道是否可能检查pthread_t变量,就像以下代码一样。pthread_t thr1 = some_invalid_value; //...

57得票5回答
为什么pthread互斥锁被认为比futex慢?

为什么 POSIX 互斥锁比 futex 重或慢?pthread 互斥锁类型的开销从哪里来?我听说 pthread 互斥锁基于 futex,在无争用时不会调用内核。看起来,pthread 互斥锁只是一个围绕 futex 的“包装器”。 这种开销是否仅在函数包装器调用和互斥锁函数需要“设置”f...

56得票4回答
你如何使用POSIX线程声明递归互斥锁?

我有点困惑如何使用pthread声明递归互斥锁。 我的目标是让一次只有一个线程能够运行一段代码(包括函数),但经过怀疑后,我发现使用互斥锁不起作用,而应该使用递归互斥锁。以下是我的代码: pthread_mutex_lock(&mutex); //...