做任務單用go實現了非同步日誌,計畫c++化練練手。本以為分分鐘搞定的事,結果debug到凌晨兩點/(ㄒoㄒ)/~~
第一版關鍵**如下:
asynclog::asynclog(size_t bufsize, writelogfunc func): _curbuf(
newbuffer(bufsize))
, _nextbuf(
newbuffer(bufsize))
, _writelogfunc(func)
, _thread([&])
, _running(true)
asynclog::~asynclog()
void*data, size_t len)
}void
asynclog::_writeloop(size_t bufsize)
_writelogfunc(buftowritevec);
if (sparebuf1 == null)
if (sparebuf2 == null)
buftowritevec.clear();
}}void
asynclog::stop()
共有五處bug喲~
光建構函式就佔了三 (╯‵□′)╯,所以說c++的抽象資料結構,碰上多執行緒,作死哇。
防範ctor、dtor中途排程到別的執行緒,是門專業技能——詳細可參考陳碩的書《linux多執行緒服務端程式設計》前兩章(這書前四章乾貨爆表)
後記:寫個**,把所有該犯的錯犯了個遍也是夠可以的( ▔___▔)y
為多執行緒當一次鎖匠
在單執行緒程式中,每次只能做一件事情,後面的事情也需要等待前面的事情完成後才可以進行,如果使用多執行緒程式,雖然能夠實現多處理,但是會發生兩個或以上的執行緒搶占資源的問題,在這個時候就要引進執行緒安全了。先看個例子 public class test1 implements runnablecatc...
非同步執行緒 一次性傳送大量郵件
1.郵件傳送介面 偽 2.構建執行緒物件 class sendemailthread extends thread public void run catch exception e 3.傳送邏輯方法sendemail 此處根據自己的業務邏輯自行設計,可將郵件及其內容寫入redis佇列,或者有mq軟...
第一次執行緒使用經驗總結
1.執行緒宣告。2.執行緒使用lamda表示式。3.使用客戶端的全域性變數。static的可以修改。4.頁面移除時會觸發乙個closed事件。從此事件中修改全域性變數。5.使得執行緒內的工作不再發生,只是處理完現在的執行緒的工作。6.執行緒內方法傳入bool型變數,相對於此方法,就是全域性變數了。7...