小编use*_*906的帖子

使用IO monads编写大部分代码是否可以

我正在尝试使用Haskell开发聊天服务器.

有很多像有用的工具TChan,TSkiplist,forkIO...等等,但事实证明,我的大部分代码是IO单子和unsafePerformIO,这听起来非常低效里面写.

这样做是否可以,或者haskell不是用于此目的的正确工具?

monads haskell

8
推荐指数
3
解决办法
736
查看次数

Erlang套接字和接收超时

如何为socket设置接收超时,我在socket选项man中找不到它.
我对问题的第一个解决方案就是把声明放在后面.

{ok, Listen} = gen_tcp:listen(Port, [..,{active, once}...]),
{ok, Socket} = gen_tcp:accept(Listen),
loop(Socket).
loop(Socket) ->
  receive
     {tcp, Socket, Data} ->
        inet:setopts(Sock, [{active, once}]),
        loop(Socket);
     {tcp_closed, Socket} -> closed;
     Other -> process_data(Other)
  after 1000 -> time_out
  end.
Run Code Online (Sandbox Code Playgroud)

但是套接字可能永远不会超时,因为有来自其他进程的消息如何设置超时而不产生其他进程?

sockets erlang timeout

6
推荐指数
1
解决办法
1464
查看次数

gen_tcp:recv和prim_inet recv之间的区别是什么?

什么是prim_inet模块,它是如何工作的?
我试图谷歌它但我没有找到任何有用的文档.
我查看了源文件prim_inet.erl,但没有什么特别的,剂量prim_inet:async_recv为每个recv生成一个新进程?

erlang inet

1
推荐指数
1
解决办法
1508
查看次数

Interlocked.CompareExchange如果不相等?

可能重复:
使用GreaterThan或LessThan而不是相等的Interlocked.CompareExchange <Int>

我知道Interlocked.CompareExchange仅在值和comparand相等时交换值,
如果不等于实现这样的话,如何交换它们?

if (Interlocked.CompareExchange(ref count, count + 1, max) != max)
    // i want it to increment as long as it is not equal to max
        {
           //count should equal to count + 1
        }
Run Code Online (Sandbox Code Playgroud)

c# multithreading atomic interlocked

1
推荐指数
1
解决办法
4745
查看次数

标签 统计

erlang ×2

atomic ×1

c# ×1

haskell ×1

inet ×1

interlocked ×1

monads ×1

multithreading ×1

sockets ×1

timeout ×1