c++ - 当人们谈论并发时, "transaction"是什么意思?

标签 c++ multithreading concurrency concurrent-programming

人们常说“写无锁程序很难”、“写正确的无锁程序更难”、“并发编程时需要从事务的角度来思考”。

交易到底是什么意思?

据我了解,在执行程序时,操作系统调度程序可能会让程序多次进入和退出CPU,并且调度程序暂停程序的确切代码位置是不确定的,这使得并发编程变得困难,因为多个线程之间的执行流可能以各种方式交错。

那么事务是指单个CPU指令还是在同一个CPU条目中执行的指令?例如下面的代码

 x = x1 + x2 + x3;

是否有可能在一个 CPU 条目中计算 x1 + x2,并在另一个 CPU 条目,并且对 x 的赋值 = 是在第三个 CPU 条目中完成的?

最佳答案

这就像数据库中的一样。有些指令只能一次执行(例如)而不会中断。 “原子操作”是另一个名字。 https://www.threadingbuildingblocks.org/docs/help/tbb_userguide/Atomic_Operations.htm

对于如何实现交易没有严格的规定。最直接的方法就是加锁。 对于 CPU 单元不提供任何保证。所以实际的答案是 - 是的,这是可能的(或者至少你应该这样对待它)。而且相同的 CPU 仍然不能保证任何东西,因为线程 hell 在单个 CPU 单元的机器上几乎是相同的。

关于c++ - 当人们谈论并发时, "transaction"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323815/

相关文章:

c++ - 如何声明线程 vector

C++ 虚拟方法返回不同的派生类型

c++ - std::thread 不是使用 Eclipse Kepler MinGW 命名空间 std 的成员

c++ - 尝试从另一个项目链接类时出现链接器错误

c++ - 当数字可能溢出C++中特定数据类型的范围时如何处理异常?

java - 不使用同步的 Java 并发中的奇怪行为

sql - 功能键和并发

haskell - writeTVar 的不安全版本

android - SQLite 实现安卓

java - Runnable 不执行应该执行的操作