编程记录
-
在C++ 11中,指针所指向的目标对象都是
const
,即不可更改。若需要通过指针来更改指向对象的值,需要显式转换:const_cast<T &>
-
在WINAPI中,对于内核对象
mutex
,锁占用和释放有以下几点需要注意:-
最好成对出现
wait
和release
; -
互斥机制在不同线程(进程)之间才有作用,同一线程(进程)重复调用
WaitForSingleObject
和ReleaseMutex
没有作用;相当于告诉系统我要使用XXX,在使用中再次告诉系统我要使用XXX,系统不会死锁; -
wait
的意义可以理解成告诉系统,这块内核对象我要使用了,别人不许使用;release
的意义相应的就是我不用了,可以给别人用了;这样解释而不是简单的认为是锁住了,会让人更容易理解为什么不会死锁,因为使用权本来就在自己手中,所以不会再次给你; -
一个线程声明
wait
(我要使用),另一个线程的release
(我不用了)对它无效,不会使mutex解锁;想想你说我要用这个东西,现在不能给别人用了,这时又来一个人说我不用这个东西了,系统怎么可能因为他不用而从你手中收回使用权; -
所以
mutex
不是单纯的++
和--
互斥关系,而是记录了哪个线程当前在使用,只有使用者声明release
才会解除锁;
-
-
对于
for(;;){}
和while(1){}
死循环的选择,for(;;){}
的反汇编是无条件跳转,而while(1){}
需要判断条件;/*********************************************/ while (1) 003B52CE mov eax,1 003B52D3 test eax,eax 003B52D5 je main+29h (03B52D9h) { } 003B52D7 jmp main+1Eh (03B52CEh) /*********************************************/ for (;;) { } 003B52E4 jmp main+34h (03B52E4h)