Articles of 互斥

一个用户崩溃时共享内存互斥?

假设一个进程正在共享内存中创build一个互斥锁,并在互斥锁被locking时locking它并转储核心。 现在在另一个过程中,我如何检测互斥锁已经被locking,但不属于任何进程?

Linux中使用条件variables的Windows事件实现?

我正试图在Linux中实现非常简单的Windows事件。 只为我的情况 – 3个线程,1个主要和2次要。 每个辅助线程通过SetEvent引发1个事件,主线程等待它。 例: int main() { void* Events[2]; Events[0] = CreateEvent(); Events[1] = CreateEvent(); pthread_start(Thread, Events[0]); pthread_start(Thread, Events[1]); WaitForMultipleObjects(2, Events, 30000) // 30 seconds timeout return 0; } int* thread(void* Event) { // Do something SetEvent(Event); // Do something } 所以,要实现它,我使用条件variables。 但是我的问题是 – 这是正确的吗? 或者我做错了什么? 我的实现: // Actually, this function return pointer […]

公平的关键部分(Linux)

在一个multithreading的Linux应用程序中,我使用了一个用于关键部分的互斥锁。 除了公平性问题,这个工作很好。 可能发生的情况是,离开关键部分并立即重新进入的线程不会给其他线程一个机会。 例如 while(true) { critsect.enter(); … do calculations … … maybe call a blocking operation so we sleep … critsect.leave(); } 可能很可能会阻止任何其他线程进入相同的关键部分。 Mutexe不公平。 是否有一个解决scheme来制定一个公正的关键部分? 我正在考虑添加一个队列,以便按照“到达”顺序执行关键部分。 或者至less有一个计数器可能做一个pthread_yield()后解锁,如果其他线程正在等待。 这种要求是否有推荐的做法?

取消locking互斥锁的线程不会解锁互斥锁

帮助客户解决他们遇到的问题。 我更像是一个系统pipe理员/数据库pipe理员,所以我正在努力帮助他们。 他们说这是内核/环境中的一个错误,我试图在我坚持认为它在代码中或者寻求供应商支持操作系统之前certificate或者反驳。 在Red Hat和Oracle Enterprise Linux 5.7(和5.8)上运行,应用程序是用C ++编写的 他们遇到的问题是主线程启动一个单独的线程来执行潜在的长时间运行的TCP连接()[client to server]。 如果“长时间运行”方面花费太长时间,则取消该线程并启动另一个线程。 这是因为我们不知道服务器程序的状态: 服务器程序启动并运行 – >连接立即被接受 服务器程序未运行,机器和networking正常 – >连接立即失败,错误“连接被拒绝” 机器或networking崩溃或closures – >连接需要很长时间才会失败,错误“无路由到主机” 问题是取消locking互斥锁的线程(清理处理程序设置为解锁互斥锁)有时不会解锁互斥锁。 这使主线程挂起来试图locking互斥锁。 详细的环境信息: 的glibc-2.5-65 的glibc-2.5-65 的libcap-1.10-26 内核debugging2.6.18-274.el5 glibc的报头-2.5-65 的glibc-共2.5-65 的libcap-1.10-26 内核DOC-2.6.18-274.el5 内核2.6.18-274.el5 内核头文件,2.6.18-274.el5 的glibc-devel的-2.5-65 代码是用c ++ -g3 tst2.C -lpthread -o tst2构build的 任何意见和指导,不胜感激

与FIFO等待队列的Linux同步

在等待队列是FIFO的Linux中是否有锁? 这似乎是这样一个明显的事情,但我刚刚发现,pthread互斥体不是先进先出,信号量显然也不是FIFO(我正在研究内核2.4(作业))… Linux是否与FIFO等待队列locking,还是有一个简单的方法来使现有的机制之一?

pthread互斥量的开销?

我正在尝试使C ++ API(用于Linux和Solaris)是线程安全的,以便可以从不同线程调用其函数,而不会破坏内部数据结构。 在我目前的方法中,我使用pthread mutexes来保护对成员variables的所有访问。 这意味着一个简单的getter函数现在可以locking和解锁一个互斥锁,而且我担心这个开销,尤其是当API主要用于单线程应用程序时,任何互斥锁似乎都是纯粹的开销。 所以,我想问一下: 你有使用锁的单线程应用程序的性能有什么经验吗? 这些locking/解锁呼叫有多昂贵,比如。 一个简单的“返回this-> isActive”访问一个布尔成员variables? 你知道更好的方法来保护这种variables访问?

线程等待父

我为我的ubuntu服务器(为我的多客户端匿名聊天程序)实现了一个简单的线程池机制,并且我需要让我的工作线程hibernate,直到需要执行一个工作(以函数指针和参数的forms) 。 我目前的系统正在走出窗口。 我(工作者线程)询问经理是否有工作,如果没有5ms的睡眠。 如果存在,则将该作业添加到工作队列并运行该function。 糟糕的浪费周期。 我想要做的是制作一个简单的类似事件的系统。 我正在考虑有一个互斥体向量(每个工作人员一个),并在创build时拥有作为参数传入的互斥体的句柄。 然后在我的pipe理员类(它持有和分发作业),每当一个线程被创build,locking互斥。 当需要执行任务时,解锁下一个互斥锁,等待它被locking和解锁,然后重新locking。 不过,我想知道是否有更好的方法来达到这个目的。 tldr; 所以我的问题是这个。 什么是最有效,最安全的方法来让一个线程等待一个pipe理类的工作? 是投票技术,我甚至应该考虑(超过1000个客户在同一时间),是互斥锁体面吗? 或者还有其他技术?

pthread_mutex_lock是如何实现的

我只是很想知道如何在Unix中实现进程和线程之间的同步相关的函数意味着当我打电话说pthread_mutex_lock什么都发生? 任何指针? 或源代码真的有帮助。

如何强制我的应用程序只能打开一个exe文件? qt,linux

我希望我的应用程序只打开一个进程,即如果一个进程已经打开,并且用户想要再次打开该exe文件 – 它不会打开另一个进程。 我怎么能在Qt – Linux? 10倍!

尝试打开互斥锁时出现UnauthorizedAccessException

当我尝试打开一个互斥锁的时候,我得到了这个exception(它只是偶尔发生,大部分的调用都是成功的): System.UnauthorizedAccessException: Access to the path 'Global\4c7cddf7-e729-43b6-a75c-43f54a0ac6ac' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.Threading.Mutex.OpenExisting(String name, MutexRights rights) 我用来处理互斥体的代码: public class MutexLocker : IDisposable { public MutexLocker(string id) { var doesNotExist = false; var unauthorized = false; try { _mutex = Mutex.OpenExisting(id, MutexRights.Synchronize | MutexRights.Modify); } catch (WaitHandleCannotBeOpenedException) { doesNotExist = true; } catch […]