人们常说“写无锁程序很难”、“写正确的无锁程序更难”、“并发编程时需要从事务的角度来思考”。
交易到底是什么意思?
据我了解,在执行程序时,操作系统调度程序可能会让程序多次进入和退出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/