小编dum*_*mmy的帖子

如何创建线程安全缓冲区/ POD?

我想我的问题很常见,但它让我发疯:

我有一个包含5个线程的多线程应用程序.其中4个线程完成它们的工作,如网络通信和本地文件系统访问,然后将它们的输出写入此表单的数据结构:

struct Buffer {
  std::vector<std::string> lines;
  bool has_been_modified;
}
Run Code Online (Sandbox Code Playgroud)

第5个线程将​​这些缓冲区/结构打印到屏幕:

Buffer buf1, buf2, buf3, buf4;

...

if ( buf1.has_been_modified || 
     buf2.has_been_modified || 
     buf3.has_been_modified || 
     buf4.has_been_modified )
{
  redraw_screen_from_buffers();
}
Run Code Online (Sandbox Code Playgroud)

如何保护缓冲区在被读取或写入时不被覆盖?

我找不到合适的解决方案,虽然我认为这必须是一个安静的常见问题.

谢谢.

c++ multithreading c++11

13
推荐指数
2
解决办法
2110
查看次数

如何异步处理双向 grpc 流

我有一个游戏或任何带有服务器和多个客户端的远程用户界面,它们应该通过网络进行通信。 客户端和服务器都应该能够异步发送更新。

这似乎是一个非常自然的服务定义,让 grpc 管理会话。

syntax = "proto3";

package mygame;

service Game {
    rpc participate(stream ClientRequest) returns (ServerResponse);
}

message ClientRequest {
    // Fields for the initial request and further updates
}

message ServerResponse {
    // Game updates
}
Run Code Online (Sandbox Code Playgroud)

实现客户端很简单(尽管下面的代码显然是不完整和简化的)。

syntax = "proto3";

package mygame;

service Game {
    rpc participate(stream ClientRequest) returns (ServerResponse);
}

message ClientRequest {
    // Fields for the initial request and further updates
}

message ServerResponse {
    // Game updates
}
Run Code Online (Sandbox Code Playgroud)

看起来困难的是在不阻塞的情况下实现服务器。

class Client: …
Run Code Online (Sandbox Code Playgroud)

python network-programming python-3.x grpc grpc-python

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