1、RALL相關知識點
2、std::set的使用??不熟練
3、一個無序整數數組中找到最長連續序列
4、Two Sum 問題 Data structure design
5、i++在兩個線程裏邊分別執行100次,能得到的最大值和最小值分別是多少?
是i++在兩個線程裏邊分別執行100次,能得到的最大值和最小值分別是多少?
i++只需要執行一條指令,並不能保證多個線程i++,操作同一個i,可以得到正確的結果。因爲還有寄存器的因素,多個cpu對應多個寄存器。每次要先把:
- i從內存複製到寄存器
- 在寄存器中i++
- 再把i複製到內存中,
這需要至少3步。從這個意義上講,說i++是原子的並不對。i++不是原子操作
如此,假設兩個線程的執行步驟如下:
1. 線程A執行第一次i++,取出內存中的i,值爲0,存放到寄存器後執行加1,此時CPU1的寄存器中值爲1,內存中爲0;
2. 線程B執行第一次i++,取出內存中的i,值爲0,存放到寄存器後執行加1,此時CPU2的寄存器中值爲1,內存中爲0;
3. 線程A繼續執行完成第99次i++,並把值放回內存,此時CPU1中寄存器的值爲99,內存中爲99;
4. 線程B繼續執行第一次i++,將其值放回內存,此時CPU2中的寄存器值爲1,內存中爲1;
5. 線程A執行第100次i++,將內存中的值取回CPU1的寄存器,並執行加1,此時CPU1的寄存器中的值爲2,內存中爲1;
6. 線程B執行完所有操作,並將其放回內存,此時CPU2的寄存器值爲100,內存中爲100;
7. 線程A執行100次操作的最後一部分,將CPU1中的寄存器值放回內存,內存中值爲2;
8. 結束!
所以該題目便可以得出最終結果,最小值爲2,最大值爲200。
求count
count =0;
x=8421;
while(x)
{
count++;
x = x&(x-1);
}
C++ priority_queue 的使用和源碼詳解
https://blog.csdn.net/qq_38289815/article/details/106748014?%3E