Windows NT操作系统具有EnterCriticalSection
和ExitCriticalSection
对象,以允许线程之间的同步。
在使用GCC编译器时,Linux的等价物是什么?
我看到对__sync_synchronize
的引用沿着还有__scoped_lock
事实上,我看到提到了一些原子__sync
函数,沿着一些__atomic
函数。
我实际上一直在使用__sync_fetch_and_add
作为原子增量,我应该使用__atomic_add_dispatch
吗?
有什么区别吗?
我应该用哪一个?C中是否有一些结构可以在最新版本的GCC和Visual C 2010中使用,因为我将编写一些跨平台代码。
我看到boost有一些可用的功能,但由于各种原因,我不允许在windows下使用boost。
4条答案
按热度按时间dddzy1tm1#
在Linux(和其他Unixen)上,你需要使用PThreads或Posix Threads。Windows上没有与Critical Sections等同的内容;使用Mutex。
编辑:参见下面的第一条评论--显然Posix Mutexes与Win32 Critical Sections相同,因为它们被绑定到单个进程。
uqjltbpv2#
点击这里:http://en.wikipedia.org/wiki/Critical_section
anauzrmj3#
EnterCriticalSection
和其余的API是Win32 API。至于跨平台同步API,我认为没有(因为你提到你不能使用boost)。另外,你提到了跨平台,这是否意味着不同的架构(对于gcc部分)。我见过一个大型实现,其中提供了一组公共API,这些API被有条件地编译为具有本机API(如AIX上的fetch_and_add)或使用pthreads的Win32 API。我曾经尝试使用posix threads on win32,但遇到了一堆问题(但那是一个非常旧的版本)。现在YMMV。zc0qhyus4#
如果你只为Windows平台开发程序,我认为最好的方法是使用Win32 API。否则,您可以使用Qt C++库(Qt Core就足够了)。
参见:QMutex和QMutexLocker您也可以使用:用途:QReadWriteLock