我有一个可以运行多次的程序。该程序使用工作目录来保存/处理其运行时文件并放置结果。我想确保如果程序的多个副本同时运行,它们将不会使用相同的文件夹。为此,我在创建工作目录时添加一个隐藏文件,这意味着正在使用该目录,并在程序退出时将其删除。当一个程序想要使用某个目录作为其工作目录时,它将检查该文件是否存在,如果不存在,它将使用该目录,否则它将使用与其进程ID相连的同名目录。实现如下:(在TCL)如何实现将同步Linux中同一程序的几个不同副本的信号量
在首发:
if [file exists [db_work_area]/.folder_used] {
reg set work_area_override [db_work_area]_[pid]
}
...
exec touch ${db_wa}/.folder_used
退出时:
if [file exists [db_work_area]/.folder_used] {
file delete [db_work_area]/.folder_used
}
当程序的拷贝被打开一次一个这样的作品,但我害怕如果同时打开多个程序副本,他们的同步就会出现问题。这意味着两个程序会一起检查文件是否存在,看它是否都选择了该目录,并且只有在这之后,它们才会添加该文件。我怎样才能实现一个信号量,它能够在运行同一个程序的几个不同副本之间进行同步?
您可以在隐藏文件上使用'flock'或'lockf'。 –