標籤:

多線程下epoll如何保證event.data.ptr不成為野指針?

我在伺服器想主動刪除一個連接, 但可能遇到以下情形: 在進行epoll_ctl(epfd, EPOLL_CTL_DEL, fd, ev)的時候, 可能存在另一個線程剛好epoll_wait到該fd的讀或寫就緒放到event數組中待進行事件處理, 這個時候event.data.ptr所指向的對象如果被直接回收的話, 進行事件處理的時候就逗了, 如何保證安全可靠性?


不是很懂你們城裡人為什麼要這麼玩,為什麼用了epoll還要使用多線程?好吧退一步講,就算新內核不會驚群,那為什麼同一個fd要丟到所有線程的epoll實例中去?真的很不理解你們城裡人為什麼要這麼玩,這豈不是自找麻煩?


我的書第 4.6 節。


保證只在同一個線程中對該epoll添加,刪除,wait


之前寫了個windows下iocp的程序,也是涉及到類似的問題,是用引用計數解決的

啟動非同步操作之前引用+1,非同步操作啟動失敗或者非同步操作完成的時候引用-1


推薦閱讀:

Android的界面組件不能被子線程訪問是什麼意思呢?
操作系統時間調度基本單位是內核線程還是進程?
非同步,多線程和並行的區別?

TAG:epoll | 多線程 |