Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读写之间的互斥_C_Windows_Multithreading_Winapi_Mutex - Fatal编程技术网

C 读写之间的互斥

C 读写之间的互斥,c,windows,multithreading,winapi,mutex,C,Windows,Multithreading,Winapi,Mutex,我对关键部分使用互斥。我有一个设计约束, 1) 若在两个不同的线程中发生2次读取,那个么临界段应该对这两个线程都可用。 2) 如果发生写操作,则应阻止在其他线程上读取 3) 如果发生读取,则应阻止在其他线程上写入 我不知道如何使用Createmutex、openmutex、waitforsingleobject和releasemutex API来实现这一点。您正在寻找的是一个。例如,internet上有一些它的实现。请查看以下链接,查看此本机windows api是否满足您的要求: 如果您的同步

我对关键部分使用互斥。我有一个设计约束, 1) 若在两个不同的线程中发生2次读取,那个么临界段应该对这两个线程都可用。 2) 如果发生写操作,则应阻止在其他线程上读取 3) 如果发生读取,则应阻止在其他线程上写入


我不知道如何使用Createmutex、openmutex、waitforsingleobject和releasemutex API来实现这一点。

您正在寻找的是一个。例如,internet上有一些它的实现。

请查看以下链接,查看此本机windows api是否满足您的要求:


如果您的同步/关键部分问题仅限于单个进程和多个线程,我建议您使用而不是。在msdn链接的页面上有几个示例。阅读链接的msdn页面,如果您掌握了基本的并发同步概念和所需的Windows Api知识,那么如果不阅读,您应该很快就会发现。从api的角度来看,互斥锁和关键部分没有什么特别之处。

一个警告:读写器锁是不公平的。您还应该仔细查看读写器锁包-如果它允许将共享锁转换为独占锁,您应该避免它-如果不引入死锁的可能性,就无法实现shared->exclusive。如果包作者留在共享->独占API中,这意味着他们实际上没有考虑读写器锁中固有的同步问题。如果您希望在Windows中使用进程内锁,则应使用关键部分而不是互斥锁。但是你还是想要一个读写器锁!