- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 Linux 程序,它产生多个进程(fork)并通过 POSIX 共享内存进行通信。我想让每个进程分配一个 id (0-255)。我的意图是在共享内存区域(初始化为零)中放置一个位 vector ,然后原子地比较和交换位以分配一个 id。
有没有对 c++11 友好的方法来做到这一点?我可以创建一个原子位集吗?我可以跨进程使用互斥锁吗?如何确保构造函数在所有进程中被调用一次且仅调用一次?
最佳答案
C++11 线程原语(互斥体、原子等)是线程原语。 C++ 标准不引用进程,并且这些工具中的大多数不跨进程互操作。
标准中唯一提到的过程是在一个非规范的符号中表示 lock-free atomics are intended to be OK for IPC :
Operations that are lock-free should also be address-free. That is, atomic operations on the same memory location via two different addresses will communicate atomically. The implementation should not depend on any per-process state. This restriction enables communication by memory that is mapped into a process more than once and by memory that is shared between two processes.
在这种非规范性表示法之外,线程原语并非旨在成为实现进程间通信的一种手段。当这些对象放置在共享内存中时(除了上面提到的无锁原子),这些对象的行为是未定义的。
关于c++11 进程间原子和互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161153/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!