應用層上的同步問題(3)

2021-05-21 17:16:47 字數 1111 閱讀 9517

由於,現在的程式多執行在多執行緒的環境中,資料的處理的順序一下子就變得重要了起來,我們知道,在核心中,我們可以使用

事件,自選鎖,或者互斥體等方式來達到同步的處理,防止操作被搶占,他們的幾乎都是使用提高中斷級的方式來達到的,也就是

windows 是乙個基於 可搶占模式的系統,只要你的**或者中斷級足夠高,那麼你就可以有特權,可以讓其他的任務暫時給你讓路,

是不是挺霸道的吧。。。。

windows 中有  ring0----ring3, 用到的也就是 ring0 和 ring3, 中斷級好像有6個吧,不過我只關心兩個, 非同步和延遲。。。。

檔案系統,使用較多。

如果我們要在程序中建立乙個執行緒來幫我們完成一些工作的話,資料的同步就變得重要了。。。

可以先看一下:example, **如下,只是為了說明原理,沒有什麼實用價值:

int g_narray[20] = ;

dword winapi mythread(lpvoid lparam)

return 0;

}int main()

cout << "id :" << dwid << endl;

//  for (int i = 0; i < 20; ++i)

//  

waitforsingleobject(handle, infinite);

closehandle(handle);

return 0;

}程式執行後:

i0d1

2:33

4775667

891011

1213

1415

1617

1819

press any key to continue

可以看出來,資料的出現並不是想我們想想的一樣。。。。

為什麼會這樣呢?

id :287601

2345

6789

1011

1213

1415

1617

1819

press any key to continue

這樣就是經過我們的方法處理過後得到的結果,其實我們用到了佇列這樣的資料結構,這樣的處理,在核心中也是經常使用的。。。

應用層上的同步原理

對於核心程式來說,同步和非同步是經常用來處理某些請求的。他們的區別在於執行的效率以及執行的方法上。對於應用層上的實現,可以有三個函式吧 1 readfiel 2 writefile 3 deviceiocontrol 他們都可以來設定不同還是非同步的方式,之前的帖子又說道過這個,不過是在核心程式下實...

應用層的例項

url檔案 存放物件的伺服器主機名 物件的路徑名 例 1 http請求報文 accept language fr方法字段 url欄位 http版本字段 2 http響應報文 data data data data data 狀態行 協議版本字段 狀態碼 相應狀態資訊 首部行實體體 3 web快取 d...

應用層通訊協議的問題

做了不少物聯網通訊上的模組,也看過了各種各樣的協議解析,也學習了不少開源軟體的網路互動方式,不談那些http和其他一些封裝好的處理方法,總認為tcp丟包或者包錯了,那就會導致解析模組很容易卡住,比如長度位錯了,你還要一直找協議頭,始終找不到,群裡大佬都說tcp丟包和錯包不用考慮,那是硬體問題或系統問...