小编ACc*_*tor的帖子

对于{A = a; B = B; ,"A = a"会在"B = b"之前严格执行吗?

假设A,B,a,和b都是变量,的地址A,B,a,和b都是不同的.然后,对于以下代码:

A = a;
B = b;
Run Code Online (Sandbox Code Playgroud)

C和C++标准是否明确要求A=a在之前严格执行B=b?考虑到的地址A,B,a,和b都不同,编译器允许交换两个语句的执行顺序为某种目的,如优化?

如果我的问题的答案在C和C++中有所不同,我想知道两者.

编辑:问题的背景如下.在棋盘游戏AI设计中,对于优化,人们使用无锁共享哈希表,如果我们不添加volatile限制,其正确性很大程度上取决于执行顺序.

c c++ compiler-construction optimization standards

51
推荐指数
2
解决办法
3672
查看次数

无需在C中使用goto即可完美退出功能的优雅方式

我们经常编写一些具有多个出口点的函数(即return在C中).同时,当退出函数时,对于一些常规工作,例如资源清理,我们希望只实现一次,而不是在每个出口点实现它们.通常,我们可以通过使用如下所示的goto来实现我们的愿望:

void f()
{
    ...
    ...{..{... if(exit_cond) goto f_exit; }..}..
    ...
    f_exit:
    some general work such as cleanup
}
Run Code Online (Sandbox Code Playgroud)

我认为在这里使用goto是可以接受的,我知道很多人同意在这里使用goto.出于好奇,是否有任何优雅的方式可以在C中不使用goto而整齐地退出函数?

c goto function exit

24
推荐指数
4
解决办法
2909
查看次数

使用两个线程在C/C++中操作不同的数组索引时,是否需要同步?

假设我有一个如下定义的数组:

volatile char v[2];
Run Code Online (Sandbox Code Playgroud)

我有两个线程(分别用A,B表示)操作数组v.如果我确保A,B在任何时候使用不同的索引,也就是说,如果A现在正在操纵v[i],那么B要么什么都不做,要么操纵v[1-i].我想知道这种情况需要同步吗?

我已经提到了这个问题,但我认为它在Java中是有限的.我之所以提出这个问题的原因是,我在一个大型项目中一直在努力解决一个奇怪而罕见的错误,直到现在,我能解释这个错误的唯一原因是需要同步以上操纵.(由于这个bug非常罕见,我很难证明我的推测是否属实)

编辑:可以读取和修改v.

c c++ arrays multithreading synchronization

11
推荐指数
2
解决办法
1077
查看次数

如何在C/C++中实现确定性多线程?

众所周知,线程作为计算模型是非确定性的.但是,在某些情况下,我们希望通过多线程并行计算来利用性能提升,同时保持执行的确定性,以便轻松满足某些一般要求,如调试或某些特定需求.我知道有可能为特定任务实现确定性多线程,但我期待一种通用且优雅的方式(也就是说,不需要大量繁琐的工程工作)来实现C/C++中的任务.解决方案的类型无关紧要:可以通过某些库,某些平台,某些通用方法或任何其他方式来实现它.

c c++ multithreading

5
推荐指数
2
解决办法
464
查看次数

不同组合的数量可能吗?

给定的位数为m,位数为n.您必须以这样的方式填充这些位置,即每个数字至少出现一次.

例如

给定m为4,n为3,因此您有4个位置和3个数字.现在,总共可能有36个组合.

让我们举一个简单的例子:

m = 3且n = 2(a,b假设)则可能的组合是

aba aab abb bab bba baa

因此,仅6种组合是可能的.是否有任何公式因为我需要找到可能的组合数量?

math combinations permutation

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