- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我们有一个包含两个线程的进程。一个线程在一些共享资源上做一些工作,并定期在 boost::interprocess::mutex 上获取一个作用域锁。另一个线程在某个随机时间导致 fork/exec。
线程 1
void takeLockDoWork() {
using namespace boost::interprocess;
managed_shared_memory segment(open_only, "xxx");
interprocess_sharable_mutex *mutex = segment.find<interprocess_sharable_mutex>("mymutex").first;
scoped_lock<interprocess_sharable_mutex> lock(*mutex);
// access or do work on a shared resource here
//lock automatically unlocks when scope is left.
}
假设线程 2 在 scoped_lock 被取出后立即 fork 。据推测,子进程与父进程具有相同的锁定状态。
会发生什么?现在是否会出现与父进程的竞争条件?
最佳答案
只要您不从持有 interprocess_sharable_mutex
的线程派生或访问受互斥锁保护的内存,就没问题。
互斥锁存在于共享内存中,这意味着即使你 fork 了,互斥锁状态也不会被复制;它存在于一个地方,可以被两个进程访问。
因为 forking 只维护子线程中的 forking 线程,只有父线程中的另一个线程认为它拥有 mutex 的所有权,所以没有问题。即使您在 fork 后尝试获取互斥锁,您仍然可以;它只会阻塞,直到 parent 释放它。
关于c++ - 如果进程在获取锁时发生 fork ,那么 boost 进程间互斥锁上的锁会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810366/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!