由於,現在的程式多執行在多執行緒的環境中,資料的處理的順序一下子就變得重要了起來,我們知道,在核心中,我們可以使用
事件,自選鎖,或者互斥體等方式來達到同步的處理,防止操作被搶占,他們的幾乎都是使用提高中斷級的方式來達到的,也就是
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丟包和錯包不用考慮,那是硬體問題或系統問...