假设在处理器上同时运行4个进程,需要将数据从HDFS (与Spark一起使用)文件系统复制到本地目录。现在,我只希望一个进程复制该数据,而其他进程只是等待第一个进程复制该数据。
所以,基本上,我想要某种信号量机制,每个进程都试图获得信号量来尝试复制数据,但是只有一个进程获得信号量。所有未能获得信号量的进程都会等待信号量被清除(能够获得信号量的进程将在完成复制后清除该信号量),并且当它被清除时,他们知道数据已经被复制了。我如何在Linux中做到这一点?
发布于 2015-06-25 07:10:05
实现信号量有很多不同的方法。经典的V系统信号量方式用man semop描述,在man sem_overview中描述得更广泛。
您可能仍然希望做一些更容易扩展和现代化的事情。许多IPC框架(Apache也有一两个这样的框架!)有原子IPC操作。这些可以用来实现信号量,但我会非常小心。
一般来说,我经常鼓励编写多进程或多线程应用程序的人使用C++而不是C。如果您的状态被很好地封装在一个对象中,那么如果您的状态被很好地封装在一个可以自己执行锁定的对象中,那么查看共享状态的保护位置通常更简单。因此,我建议您看看Boost的IPC同步机制。
https://stackoverflow.com/questions/31043380
复制相似问题