Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ Win32上的联锁操作与XXX::atomic_C++_Winapi_Atomic_Interlocked - Fatal编程技术网

C++ Win32上的联锁操作与XXX::atomic

C++ Win32上的联锁操作与XXX::atomic,c++,winapi,atomic,interlocked,C++,Winapi,Atomic,Interlocked,在Win32平台上使用互锁的winapi函数代替任何提供原子操作的库有哪些优点和缺点 可移植性不是问题 即使在没有CPU支持锁定操作的情况下,联锁winapi函数也可以在旧处理器上工作。386和486,除非您仍然支持Win9x和旧的NT,否则今天不是真正的问题。即使在没有CPU支持锁定操作的情况下,联锁winapi函数也可以在旧处理器上工作。386和486,除非您仍然支持Win9x和旧版NT,否则今天不是真正的问题。这可能取决于所讨论的特定原子库 一个好的具有特定后端的库很可能会使用两条ASM指

在Win32平台上使用互锁的winapi函数代替任何提供原子操作的库有哪些优点和缺点


可移植性不是问题

即使在没有CPU支持锁定操作的情况下,联锁winapi函数也可以在旧处理器上工作。386和486,除非您仍然支持Win9x和旧的NT,否则今天不是真正的问题。

即使在没有CPU支持锁定操作的情况下,联锁winapi函数也可以在旧处理器上工作。386和486,除非您仍然支持Win9x和旧版NT,否则今天不是真正的问题。

这可能取决于所讨论的特定原子库

一个好的具有特定后端的库很可能会使用两条ASM指令的相同实现来发出x86锁指令并完成它们的工作。假设库本身是可移植的,那么接下来就让代码可移植

一个简单的原子实现可能会做一些更重要的事情,比如使用互斥来保护一个普通变量。我不知道有哪一个是这样做的——只是提出论点


因此,考虑到您声明的不可移植性要求,使用Win32函数应该可以。或者,继续使用原子版本,但可能看看实际的实现。

这可能取决于所讨论的特定原子库

一个好的具有特定后端的库很可能会使用两条ASM指令的相同实现来发出x86锁指令并完成它们的工作。假设库本身是可移植的,那么接下来就让代码可移植

一个简单的原子实现可能会做一些更重要的事情,比如使用互斥来保护一个普通变量。我不知道有哪一个是这样做的——只是提出论点


因此,考虑到您声明的不可移植性要求,使用Win32函数应该可以。或者,继续使用原子版本,但也许可以看看实际的实现。

如果可移植性不是一个问题,那么基本上你就要决定你更信任谁才能做到这一点。图书馆的设计通常是为了提供可移植性。否则,它将很难与一个由操作系统提供的实现竞争,而这个实现已经经过了15年的战斗


查看一个明显的实现实际上不是最好的例子。

如果可移植性不是一个问题,那么您基本上要决定您更信任谁来实现这一点。图书馆的设计通常是为了提供可移植性。否则,它将很难与一个由操作系统提供的实现竞争,而这个实现已经经过了15年的战斗


查看一个例子,说明显而易见的实现实际上并不是最好的。

例如,Intel的TBB::atomic。微软提供操作系统,但英特尔生产处理器。你更相信谁?呵呵,你相信英特尔代码在AMD处理器上运行良好吗?让我们假设代码将始终在英特尔处理器上运行,这在我的例子中是正确的。例如,英特尔的TBB::atomic。微软提供操作系统,但英特尔生产处理器。你更相信谁?呵呵,你相信英特尔代码在AMD处理器上运行良好吗?让我们假设代码将始终在英特尔处理器上运行,这在我的情况下是正确的。不过它们在这些CPU上的工作方式不同。它们只是原子级的,与其他互锁操作相关。不过,它们在这些CPU上的工作方式不同。它们只是原子的,与其他互锁操作有关