6月21 刷題思考

1、RALL相關知識點

2、std::set的使用??不熟練

3、一個無序整數數組中找到最長連續序列

4、Two Sum 問題 Data structure design

5、i++在兩個線程裏邊分別執行100次,能得到的最大值和最小值分別是多少?

是i++在兩個線程裏邊分別執行100次,能得到的最大值和最小值分別是多少?

i++只需要執行一條指令,並不能保證多個線程i++,操作同一個i,可以得到正確的結果。因爲還有寄存器的因素,多個cpu對應多個寄存器。每次要先把:

  1. i從內存複製到寄存器
  2. 在寄存器中i++
  3. 再把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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章