多線程下epoll如何保證event.data.ptr不成為野指針?
01-08
我在伺服器想主動刪除一個連接, 但可能遇到以下情形: 在進行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的界面組件不能被子線程訪問是什麼意思呢?
※操作系統時間調度基本單位是內核線程還是進程?
※非同步,多線程和並行的區別?