asio 中strand的作用

2021-09-07 14:32:03 字數 1778 閱讀 9961

[cpp]view plain

copy

print?

namespace  

void iorun1()  

}  void iorun2()  

}  void strand_print1()  

void strand_print2()  

void strand_print3()  

void strand_print4()  

// 將上面的m_strand換成m_service後,  

void service_print1()  

void service_print2()  

void service_print3()  

void service_print4()  

}  void test_strand()  

void test_service()  

test_strand的執行結果:

[cpp]view plain

copy

print?

2013-01-05 17:25:34 626 [8228] debug - id: 4  

2013-01-05 17:25:34 631 [8228] debug - count: 1  

2013-01-05 17:25:34 634 [5692] debug - id: 1  

2013-01-05 17:25:34 637 [5692] debug - count: 2  

2013-01-05 17:25:34 640 [5692] debug - id: 2  

2013-01-05 17:25:34 642 [5692] debug - count: 3  

2013-01-05 17:25:34 646 [5692] debug - id: 3  

2013-01-05 17:25:34 649 [5692] debug - count: 4  

test_ioserivice的執行結果:

[cpp]view plain

copy

print?

2013-01-05 17:26:28 071 [3236] debug - id: 1  

2013-01-05 17:26:28 071 [5768] debug - id: 2  

2013-01-05 17:26:28 071 [5108] debug - id: 3  

2013-01-05 17:26:28 076 [3236] debug - count: 1  

2013-01-05 17:26:28 079 [5768] debug - count: 2  

2013-01-05 17:26:28 083 [5108] debug - count: 3  

2013-01-05 17:26:28 087 [3236] debug - id: 4  

2013-01-05 17:26:28 099 [3236] debug - count: 4  

從結果可以看到, 在test_strand中print中兩個列印函式成對執行, 在test_ioservice兩個列印函式就沒有執行緒安全可言了.

如果要保證test_ioservice同步, 就要加上mutex, 在**中被注釋的那句. 

注意從日誌的執行緒號中可知: 真正執行print()是主線程, ios1, ios2, 而t1, t2, t3, t4執行緒只是往ioservice的佇列中加入任務.

boost的網路庫asio

boost在1.35版本之後終於加入了網路庫asio。春節期間終於得閒能夠一窺究竟,同時將boost.asio和知名的ace框架做一下比較。asio的名字突出了非同步i o的能力,從asio的文件中看到它使用了和ace proactor框架中相似的proactor模式。csdn上也有很多也寫了很多關...

asio製作使用ssl通訊的證書

1,生成ca的key openssl genrsa out ca.key 1024 2048 with out password protected openssl genrsa des3 out ca.key 1024 2048 password protected 2,根據ca的key,生成頂級...

qvfb 中 的作用

root fedora7 qvfb 加上 符號使qvfb程序開啟後shell立即返回,否則會阻塞shell程序,需要再開乙個shell才可以執行minigui程式。即 作用為使得程式在後台執行!每次開啟qvfb都要調解析度和顏色深度,很不爽,可以搞個指令碼。比如,新建個指令碼名為qvfb8,內容這麼...