有没有人试图在VS 2010 RC下构建gtest 1.4.0?
当我尝试构建它时,我得到大约400个错误.提前致谢.
我需要为结构的某些成员提供同步.
如果结构是这样的
struct SharedStruct {
int Value1;
int Value2;
}
Run Code Online (Sandbox Code Playgroud)
我有一个全局变量
SharedStruct obj;
Run Code Online (Sandbox Code Playgroud)
我希望从处理器写入
obj.Value1 = 5; // Processor B
Run Code Online (Sandbox Code Playgroud)
能够立即看到其他处理器,以便在我测试该值时
if(obj.Value1 == 5) { DoSmth(); } // Processor A
else DoSmthElse();
Run Code Online (Sandbox Code Playgroud)
获取新值,而不是缓存中的旧值.
首先,我认为如果我在写/读取值时使用volatile,就足够了.但我读到,挥发性无法解决这类问题.
保证成员在2/4/8字节边界上正确对齐,在这种情况下写入应该是原子的,但我不确定缓存如何干扰它.
使用记忆障碍(mfence,sfence等)就够了吗?或者需要一些互锁操作?
或者类似的东西
lock mov addr, REGISTER
Run Code Online (Sandbox Code Playgroud)
?
最简单的显然是一些锁定机制,但速度是至关重要的,无法承受锁:(
编辑
也许我应该澄清一下.该值仅设置一次(表现得像一个标志).所有其他线程只需阅读它.这就是为什么我认为它可能是一种在不使用锁的情况下强制读取这个新值的方法.
提前致谢!
我需要合并两个双向链表,但不是它们的值(列表没有排序).我想获得一个列表,其中包含两个节点中的所有节点,但按照它们在内存中的显示顺序.
也许这张图片更有帮助:http: //img140.imageshack.us/i/drawing2.png/
有没有可以进行这种合并的算法(最好是快速算法)?也许这有点帮助:
提前致谢!
我有一个内存块,它被分成一系列位置,可以通过客户端代码检索和返回.
返回位置的方法如下所示:
void ReturnLocation(void *address) {
int location = AddressToLocation(address); // I need the location here
// some code
DoSmthA(location);
}
void DoSmthA(int location) {
// I need the address, but also the location
void *address = LocationToAddress(location);
// do something with the address
DoSmthB(location);
}
void DoSmthB(int location) {
// Again, I need the address, but also the location
void *address = LocationToAddress(location);
// do something with the address
DoSmthC(location); // It may go on this way...
}
// …Run Code Online (Sandbox Code Playgroud)