現有一個利用zmq的數據發佈API,傳入發佈數據時,加鎖將數據放置到鏈表中,然後設置信號量。
另有一個線程一直循環,獲取信號量,加鎖鏈表,然後將數據發送出去。該種設計是否與zmq本身的設計理念不符合?
替換方案1:傳入發佈數據,然後查看鏈表是否爲空;如果鏈表不爲空,則嘗試將鏈表中數據發送,成功則持續發送直到鏈表爲空,然後將傳入的數據發送。如果鏈表爲空時則將數據放入鏈表末端。
if (list.empty())
send if failed then cache
else
{
for list
{
if (send success)
{
pop the sent one
}
else break;
}
list.push_back(the new msg);
}