[英]Haskell concurrency and Handles
我正在編寫一個小的通知服務器以將數據推送到客戶端。 基本架構看起來像這樣(簡化后的偽代碼):
acceptConnections sock = forever $ do
connection <- accept sock
forkIO (handleConnection connection)
handleConnection connection = do
connectionHandle <- socketToHandle connection ReadWriteMode
handleMessage connectionHandle
hClose connectionHandle
handleMessage connectionHandle = forever $ do
message <- hGetLine connectionHandle
if shouldPushMessage message
then hPutStrLn targetConnection message
else return ()
其中targetConnection(在handleMessage中)來自單獨的連接,並且將handleMessage掛在另一個線程中,等待其緩沖區被填充。 我認為這會引起問題,因為我有2個線程訪問相同的Handle。 所以,我的問題是,為什么這不是問題? 還是它,而我只是還沒有看到它變成一個問題? 在我的實際應用程序中,當我抓住targetConnection時,我是通過通過MVar訪問的地圖來完成的,但是在hGetLine調用中並不能安全地訪問它。
免責聲明:我是完整的Haskell和多線程newb
感謝您的任何解釋/見解!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.