OCaml,与 "and" 同时同步两个事件
OCaml, Sync on two events simultaneous with "and"
我写了一个有 6 个线程和 3 个通道的小程序。 3 个线程同时在 2 个通道上发送,另外 3 个线程正在接收。现在的问题是,发送线程似乎占用了一个通道,但如果它不能占用第二个通道,它就会保留第一个。
我想要的效果是发送线程尝试发送超过 2 个通道。如果这不起作用,它不会保留它获得的那个并等待最后一个工作。
我以为这样就可以了。不过好像不是。
let takeFork2 = Event.send take_f2 3 in
let takeFork3 = Event.send take_f3 3 in
let e2 = Event.sync takeFork2 and
e3 = Event.sync takeFork3 in
所以 和 在这里误导了?!我应该使用嵌套环绕,wrap_abort,选择,...来实现我的目标吗?
我问这个是为了让 和 为人所知。我不熟悉OCaml。
谢谢
约翰内斯
嗯,and
不是事件原语。它是 OCaml 语法的一个基本部分,其目的是允许相互递归定义。在我看来,只要您意识到这一点,就不会产生误导。如果它是一个事件原语,它将在 Event
模块中定义,在我看来。
据我所知,Event
模块不支持等待事件的合取,只支持析取。等待连词(对我来说)似乎容易出现死锁。
我写了一个有 6 个线程和 3 个通道的小程序。 3 个线程同时在 2 个通道上发送,另外 3 个线程正在接收。现在的问题是,发送线程似乎占用了一个通道,但如果它不能占用第二个通道,它就会保留第一个。 我想要的效果是发送线程尝试发送超过 2 个通道。如果这不起作用,它不会保留它获得的那个并等待最后一个工作。
我以为这样就可以了。不过好像不是。
let takeFork2 = Event.send take_f2 3 in
let takeFork3 = Event.send take_f3 3 in
let e2 = Event.sync takeFork2 and
e3 = Event.sync takeFork3 in
所以 和 在这里误导了?!我应该使用嵌套环绕,wrap_abort,选择,...来实现我的目标吗?
我问这个是为了让 和 为人所知。我不熟悉OCaml。
谢谢
约翰内斯
嗯,and
不是事件原语。它是 OCaml 语法的一个基本部分,其目的是允许相互递归定义。在我看来,只要您意识到这一点,就不会产生误导。如果它是一个事件原语,它将在 Event
模块中定义,在我看来。
据我所知,Event
模块不支持等待事件的合取,只支持析取。等待连词(对我来说)似乎容易出现死锁。