Articles of multithreading

如何防止作者在pthreads读写locking中的饥饿

我有一些关于* nix系统上的POSIX Pthreads读写锁的问题,比如Linux。 我想知道什么是读写锁的默认偏见,即它喜欢读取写入,反之亦然? 它是否提供了一些API来改变这种默认行为。 posix pthread是否提供了一些API,以便我们可以更改pthread_rwlock_t以防止作者饿死? 从我读过的(请纠正我,如果我错了),默认实现偏向读者线程,所以写作线程可能面临饥饿。 我已经阅读了由David Butenhof编写的使用Posix线程编程的书中rw锁的示例实现。 我想知道posix pthreads如何处理作家线程的饥饿? 是否有一些使用我们可以设置读写锁的属性,以防止写挨饿(我从来没有听说过)? 或者用户不得不处理这个问题? 如果你认为答案是实现定义的,那么请举例说明在Linux中是如何完成的,因为那就是我正在寻找的。 请注意,我只想要一个* nix系统的解决scheme。 不要以为我很粗鲁,但发布一些特定于Windows的代码对我来说是无用的。 谢谢大家的帮助和耐心:)

防止Linux线程被调度程序中断

你如何告诉Linux中的线程调度程序不要因为任何原因中断你的线程? 我正在用户模式下编程。 简单地locking一个互斥体是否可以实现这个function? 我想阻止在执行某个函数时调度进程中的其他线程。 他们会阻止,我会浪费cpu周期与上下文切换。 我希望任何执行该函数的线程都能够在不中断的情况下完成执行,即使超过了线程的时间片也是如此。

获取其他线程的回溯

在Linux中,为了获得回溯,可以使用backtrace()库调用,但它只返回当前线程的回溯。 有什么办法得到其他线程的回溯,假设我知道它是TID(或pthread_t),我可以保证睡觉? 看来,libunwind(http://www.nongnu.org/libunwind/)项目可以提供帮助。 问题是CentOS不支持它,所以我不喜欢使用它。 任何其他的想法? 谢谢。

在Linux中等待WaitForSingleObject和WaitForMultipleObjects

我正在从Windows到Linux迁移应用程序。 我WaitForSingleObject和WaitForMultipleObjects接口的问题。 在我的应用程序中,我产生了多个线程,其中所有线程都等待来自父进程的事件,或者每t秒周期运行一次。 我已经检查了pthread_cond_timedwait ,但是我们必须为此指定绝对时间。 我怎么能在Unix中实现这个?

防止多个服务实例 – 最佳方法?

那么,您认为如何防止同时运行C#Windows服务的多个线程(该服务正在使用带有OnElapsed事件的timer )? 使用lock()或mutex ? 我似乎无法掌握mutex的概念,但使用lock()似乎对我的情况很好。 我应该花时间学习如何使用mutex吗?

Java中的跨进程同步

我如何同步在Windows上运行的两个Java进程? 我正在寻找像Win32命名互斥对象,它允许两个进程使用相同的locking对象。 谢谢

Windows API线程池简单的例子

[编辑:感谢MSalters答案和雷蒙德陈的InterlockedIncrement VS EnterCriticalSection / counter ++ / LeaveCriticalSection的答案 ,问题已解决,下面的代码工作正常。 这应该提供一个在Windows中使用线程池的有趣简单例子] 我无法find以下任务的简单示例。 我的程序,例如,需要增加一个巨大的std :: vector中的值,所以我想这样做并行。 它需要在程序的整个生命周期中进行很多次。 我知道如何在例程的每次调用时使用CreateThread,但是我无法摆脱使用ThreadPool的CreateThread。 这是我做的: class Thread { public: Thread(){} virtual void run() = 0 ; // I can inherit an "IncrementVectorThread" }; class IncrementVectorThread: public Thread { public: IncrementVectorThread(int threadID, int nbThreads, std::vector<int> &vec) : id(threadID), nb(nbThreads), myvec(vec) { }; virtual void […]

debuggingmultithreading应用程序后系统错误

debuggingmultithreading应用程序后,我有系统库“ntdll.dll”的错误。 错误代码是0x4000001f(STATUS_WX86_BREAKPOINT)。 错误发生在个案的情况下,只有在通过Delphi IDEdebugging时才会发生。 我在Win7 x64上使用Delphi 2010。 在什么可能是问题? 谢谢。

为什么Windows 10在我的程序中启动额外的线程?

在Visual Studio 2015中,在一个新的空的C ++项目中,为控制台应用程序构build以下内容: int main() { return 0; } 在返回中设置一个中断点,并在debugging器中启动程序。 在Windows 7上,从截点开始,这个程序只有一个线程。 但在Windows 10上,它有五个(!)线程:主线程和四个等待同步对象的“工作线程”。 谁启动线程池(或如何找出)?

WaitForSingleObject是否放弃线程的时间片?

我正在C做一个win32程序 当你有多个线程正在运行,并且其中一个线程正在等待一个事件(例如使用WaitForSingleObject() )时,那个线程是否仍然会得到完整的CPU时间片? 换言之,操作系统是否知道该线程不需要其时间片,直到其中一个事件发出信号为止?