그냥 호기심. forkIO
을 사용하여 2 개의 스레드가 생성되면 MVar
을 사용하여 통신 할 수 있습니다. par
을 사용하여 만든 병렬 하스켈의 스파크를 사용할 때도 똑같이 적용되는지 궁금합니다. 나는 par
이 실제 스레드를 만들지 않고 병렬로 일어날 수있는 계산에 대한 포인터를 만든다는 것을 이해합니다.MVar가`par`와 함께 작동하지 않는 이유는 무엇입니까?
다음 코드는 main
이 컴파일되어 thread blocked indefinitely in an MVar operation
오류가 발생합니다.
t1 a = putMVar a "Hi"
t2 a = do
v <- takeMVar a
print v
main1 = do
a <- newEmptyMVar
forkIO (t1 a)
forkIO (t2 a)
main = do
a <- newEmptyMVar
(t1 a) `par` (t2 a)
감사합니다. 행동을 촉발 한 부분 만이 순수 할 수 있습니다! :) – vis
스파크 내에서 unsafePerformIO가 발생하더라도 스파크가 가비지 콜렉션 루트로 작동하지 않으므로 폐기 될 수 있으므로이 검사는 잠재적 인 작성자를 찾을 수없는 권한입니다. –