c/c++语言开发共享读取/写入bool值保证是C / C ++中的一条指令

我无法想象一个架构会在多个指令中设计对其最小数据类型的访问,但也许流水线有一些我不考虑的问题?

    C ++标准无法保证是否在单个操作中读取和写入bool对象,因为这会对底层硬件施加约束,C和C ++会尝试将其最小化。

    但请注意,在multithreading场景中,读取/写入数据类型是否为primefaces的问题只是问题的一半。 另一半是对某些地址的更改是否反映在所有缓存中 (即不同内核本地的缓存 ),以及它们是否以相同顺序反映在所有线程中。 为此你需要内存障碍。

    不,不保证。

    C89和C99无法表达primefaces性。 C11有primefaces对象。

    编译器通常提供具有primefaces性的扩展:例如对于gcc

    更好的是使用pthreads库的一些原语。

    例如,您有2个使用相同数据的线程。

    你的主题1必须如下所示。 让免费精选名字大全为“i”:

     while (true) { flag[i] = TRUE; turn = j; while ( flag[j] && turn == j); CRITICAL SECTION flag[i] = FALSE; REMAINDER SECTION } 

    你的主题2必须如下所示。 我们将其命名为“j”:

     while (true) { flag[j] = TRUE; turn = i; while ( flag[i] && turn == i); CRITICAL SECTION flag[i] = FALSE; REMAINDER SECTION } 

    flag变量控制每个线程的临界区的入口。

    代码运行如下:

    1-每个线程都希望通过将其标志设置为true来进入临界区。

    2-例如线程“i”通过设置转弯将其传递给线程“j”。 turn变量存储进入临界区的线程。

    因为转弯变量只能存储一个值。 保证一个线程一次可以进入临界区。 没有其他线程可以进入临界区,如果存在的话。

    4-线程j看到标记点,传递是它自己的并且想要进入。 因此它可以进入关键部分。 而线程我等待。

    4-线程j运行后。 它通过确定自己不想输入临界区来设置其标志变量false。

    5线程我在while循环的开头被举起来了。

    6-一旦线程j通过转动其开始转向其他线程。 线程我进入关键部分。

    这段代码满足。 互斥,进度和边界等待条件。

    此代码可以运行支持线程的所有环境,并且可以与任何基于C的语言一起使用。

      以上就是c/c++开发分享读取/写入bool值保证是C / C ++中的一条指令相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522527.html

      (0)
      上一篇 2020年12月10日
      下一篇 2020年12月10日

      精彩推荐