我有一个这样的数组:
unsigned char array[] = {'\xc0', '\x3f', '\x0e', '\x54', '\xe5', '\x20'};
unsigned char array2[6];
Run Code Online (Sandbox Code Playgroud)
当我使用memcpy时:
memcpy(array2, array, 6);
Run Code Online (Sandbox Code Playgroud)
并打印它们:
printf("%x %x %x %x %x %x", array[0], // ... etc
printf("%x %x %x %x %x %x", array2[0], // ... etc
Run Code Online (Sandbox Code Playgroud)
一个打印像:
c0 3f e 54 e5 20
Run Code Online (Sandbox Code Playgroud)
但另一个打印
ffffffc0 3f e 54 ffffffe5 20
Run Code Online (Sandbox Code Playgroud)
发生了什么?
在一个多线程的C++程序中,我在一个线程中运行相当于这个:
while(obj->member) { } // waiting for obj->member to be set to false in another thread
Run Code Online (Sandbox Code Playgroud)
在另一个线程中,obj-> member设置为false.但是,即使将其设置为false,循环也不会中断.如果我改成它:
while(obj->member) { Sleep(1) }
Run Code Online (Sandbox Code Playgroud)
当obj-> member在另一个线程中设置为false时,它按预期工作并中断.
它为什么这样工作?