我们能从不同的线程安全地读取/更新布尔值吗?我的意思是这个行动是原子的吗?我想知道所有平台(android、ios、macos、linux、windows)都是这样的
我想要做的是使用一个布尔变量作为一个标志。类似于:
var isempty: boolean;
::thread x
if not isempty then begin .... isempty := true; end;
...
::thread y
isempty := false:
我找到了一个在linux中可以在g++下再现的竞赛条件的例子。在这个例子中,我不明白操作的顺序是如何重要的。
int va = 0;
void fa() {
for (int i = 0; i < 10000; ++i)
++va;
}
void fb() {
for (int i = 0; i < 10000; ++i)
--va;
}
int main() {
std::thread a(fa);
std::thread b(fb);
a.join();
b.join();
std::
我正在尝试在linux平台(ARM 8148)上交叉编译opencv。
我收到以下错误:
warning: libQtTest.so.4, needed by ../../lib/libopencv_highgui.so.3.0.0, not found (try using -rpath or -rpath-link)
/opt/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: libQtC
在一个在GNU/Linux中用GCC编译的C程序中,使用非原子和非易失性变量在线程之间共享数据(如果使用这些变量的线程是通过原子负载和存储来同步的话)是否安全(从意义上说它不会引入意外行为)?如果没有,我应该用什么代替呢?
对于示例,GCC是否保证以下代码将按预期工作(thread_2总是返回1)?假设两个函数都是从不同的线程调用的。如果使用C11原子原语编写,如果使用POSIX线程互斥进行同步,还是使用POSIX信号量,则会有什么不同吗?我只将以下代码作为特定情况包括在内。
int data = 0;
int flag = 0;
int thread_1 (void) {
data