亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3410 | 回復: 2
打印 上一主題 下一主題

有人了解HASKELL的Software Transacational Memory嗎? [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-02-09 21:07 |只看該作者 |倒序瀏覽
請教兩個問題:
1、Haskell中的事務允許包含IO嗎?
2、如果事務允許包含IO的化,那么Haskell是怎么實現(xiàn)IO回滾的?

請用Haskell的STM完成下面的功能,先謝謝了。

  1. // 使用io_mutex保證thread1、thread2的輸出行不會交織在一起。
  2. pthread_mutex_t io_mutex;

  3. void thread1()
  4. {
  5.        pthread_mutex_lock(&io_mutex);
  6.        printf("THREAD1 OUTPUT\n");
  7.        pthread_mutex_unlock(&io_mutex);
  8. }

  9. void thread2()
  10. {
  11.        pthread_mutex_lock(&io_mutex);
  12.        printf("THREAD2 OUTPUT\n");
  13.        pthread_mutex_unlock(&io_mutex);
  14. }

復制代碼

[ 本帖最后由 CRLF 于 2009-2-9 21:13 編輯 ]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2009-02-10 10:52 |只看該作者
事務當中當然不能包括 IO,否則就有你說的回滾的問題。
你說的問題,用 STM 可以這樣解決:
  1. data FlwMutex = FlwMutex (TVar Int)

  2. flwMutexLock                    :: FlwMutex -> IO ()
  3. flwMutexLock (FlwMutex tv)   = atomically $ do
  4.     n <- readTVar tv
  5.     check (n == 0)
  6.     writeTVar tv 1
  7.     return ()

  8. flwMutexUnlock                 :: FlwMutex -> IO ()
  9. flwMutexUnlock (FlwMutex tv) = atomically $ do
  10.     n <- readTVar tv
  11.     check (n == 1)
  12.     writeTVar tv 0
  13.     return ()

  14. thread1         :: FlwMutex -> IO ()
  15. thread1 mutex   = do
  16.     flwMutexLock mutex
  17.     putStrLn "--- Thread1 output ---"
  18.     flwMutexUnlock mutex

  19. thread2         :: FlwMutex -> IO ()
  20. thread2 mutex   = do
  21.     flwMutexLock mutex
  22.     putStrLn "--- Thread2 output ---"
  23.     flwMutexUnlock mutex
復制代碼

當然了,不排除有已經(jīng)包裝好的 POSIX pthread API,我就不清楚了。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-02-10 13:13 |只看該作者
先謝2L解答!

第一次看到STM的介紹時,覺得STM真是個好主意,應該能夠解決多線程中復雜的LOCK問題,但是后來深入了解后才發(fā)現(xiàn)STM有個非常棘手的問題,就是很難實現(xiàn)高效的、透明的IO回滾,有的論文提出使用BUFFER的方式可以實現(xiàn)在STM中包含IO,可惜只是paper design,當不得真的。

INTEL的C++ STM原型編譯器已經(jīng)出第3版了,初看它的例子,真的很吸引人,只要用__tm_atomic把需要原子執(zhí)行的代碼塊標記出來就可以了,但是看了下它的手冊,發(fā)現(xiàn)在實際中使用STM并不是像paper中描述的那么美好和簡單。

附錄:INTEL的C++ STM編譯器
http://software.intel.com/en-us/ ... ototype-edition-20/
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP