多執行緒同步的筆試問題

2021-06-10 12:06:18 字數 505 閱讀 2400

一,以下多執行緒對int型變數x的操作,哪幾個不需要進行同步: 

a. x=y;      b. x++;    c. ++x;d. x=1;

因為abc都對2個暫存器進行操作

下表是乙個多執行緒加鎖的規律表

操作的結果與初值無關

操作的結果與初值相關

寫簡單資料型別

不需要加鎖①

需要加鎖②

寫複雜資料型別

需要加鎖③

需要加鎖④

讀簡單資料型別

不需要加鎖⑤

不需要加鎖⑥

讀複雜資料型別

需要加鎖⑦

需要加鎖⑧

可以同樣看到abc都是寫簡單資料型別 並且操作的結果與初值相關。所以需要加鎖。即要求同步

第2種情況的典型代表是「i++;」,需要對它加鎖是因為它表面上雖然只有一條語句,卻要執行至少兩個操作,一是讀出i的初始, 二是把加一後的結果寫回去,兩個操作就沒有「原子性」了,所以需要加鎖.

多執行緒同步問題

在應用程式中使用多個執行緒的乙個好處是每個執行緒都可以非同步執行。對於 windows 應用程式,耗時的任務可以在後台執行,而使應用程式視窗和控制項保持響應。對於伺服器應用程式,多執行緒處理提供了用不同執行緒處理每個傳入請求的能力。否則,在完全滿足前乙個請求之前,將無法處理每個新請求。然而,執行緒的...

多執行緒同步問題

有四個執行緒1,2,3,4,執行緒1的功能就是輸出1,執行緒2的功能就是輸出2,以此類推.現在有四個檔案.abcd.初始都為空.現要讓四個檔案呈如下格式 a 1 2 3 4 1 2.b 2 3 4 1 2 3.c 3 4 1 2 3 4.d 4 1 2 3 4 1.設計程式.include sys ...

多執行緒 同步問題

我們先看個錯誤示例。功能 宣告乙個數字並賦值10000.然後讓1w個執行緒去減少1,1w個執行緒去增加1。理論上說,加一萬減一萬,最後數字的結果並不會改變。class errordemo 釋放object的方法 synchronized 塊結束或者異常丟擲。使用synchronized後的 publ...