gpt4 book ai didi

multithreading - TMVar,但是没有缓冲区吗?

转载 作者:行者123 更新时间:2023-12-03 12:55:29 25 4
gpt4 key购买 nike

我正在尝试在Haskell轻量级线程之间进行通信。线程希望互相发送消息以进行通信和同步。

我最初是使用TMVar来实现的,但是我刚刚意识到语义是错误的:TMVar将在内部存储一条消息,因此将消息放置到空的TMVar不会被阻止。仅当您将消息发布到完整的TMVar时,它才会阻止。

谁能建议一个类似的STM IPC构造:

  • 将导致所有写操作都被阻塞,直到消息被消耗为止。
  • 将导致所有读取被阻止,直到提供消息为止?

  • 即零长度的管道将是理想的;但是我不认为 BoundedChan如果将其容量设置为0会很高兴。(而且,它不是 STM。)

    最佳答案

    如果我正确地理解了您的问题,那么我认为您不会,因为事务性保证意味着事务A在提交事务B之前无法从事务B的写入中读取,此时事务B无法再阻塞。

    如果您使用的是STM,则TMVar是最接近的代码。使用IO,您可能能够构建仅在有读者可用时才能完成写入的结构(该结构可能已经存在,但我不知道)。

    关于multithreading - TMVar,但是没有缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30824054/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com