相关疑难解决方法(0)

为什么C需要挥发性?

为什么volatileC需要?它是干什么用的?它会做什么?

c declaration volatile

396
推荐指数
15
解决办法
27万
查看次数

volatile const int 在 C 中的含义?

我正在读一关于 C的。它提到了一个对我来说没有意义的概念。我所知道的是,编译器有时会通过删除它认为不会影响表达式的变量来优化代码。因此,如果我们为变量指定 volatile,它不会从任何表达式中删除该变量。

所以这本书介绍了这样的东西:

volatile const int a = 1;
Run Code Online (Sandbox Code Playgroud)

解释只有几行,对我来说没有任何意义。有人可以解释一下为什么需要这样的变量吗?

PS:我理解volatile的概念,我不理解的是volatile const的概念。

c

5
推荐指数
1
解决办法
1735
查看次数

c ++在线程之间共享状态的最佳方式

方案如下:线程A继续执行,直到它从线程B收到一个停止从控制台读取输入的停止信号.

实现这个的最佳方法是什么?例如,我想我可以将它实现为一个全局变量,线程A每隔一段时间就会检查一次,而线程B可以改为发出"停止"信号,

但我不知道这是不是正确的方法.

  • 即使它是正确的,我应该使用"Volatile"还是"Atomic <>"?特别是线程A只读取变量的值,而线程B只写入变量.

  • 如果在线程A读取它之后立即从线程B修改变量并不重要(不会引起问题"线程A退出时间有些放松(在信号之后容忍)")?

  • 是否还有另一种方法让线程B启动线程A并在需要时停止它?

c++ multithreading mutex atomic c++11

4
推荐指数
1
解决办法
1079
查看次数

gcc中的编译器优化

我有一个C代码,我正在运行一些测试.我需要访问一个数组,但是在"只读"模式下.我正在做这样的事情:

for (int i= 0; i < 1000; i++){
    int a = shared_array[rand() % 64];
    int b = shared_array[rand() % 64];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何从内存中获取值并确保编译器没有通过删除这些指令来优化它,因为在我的测试中我对这些值没有任何作用.即使我添加了一个操作int v = a + b,也不会在其他任何地方使用v,因此可以忽略它.

我正在使用gcc和-O3,我需要这样做才能将它与来自其他来源的结果进行比较.

c compiler-construction optimization

3
推荐指数
1
解决办法
108
查看次数