我有一个可以多次运行的程序。该程序使用一个工作目录来保存/操作其运行时文件并放置结果。我想确保如果程序的多个副本同时运行,它们不会使用同一个文件夹。为此,我在创建工作目录时在工作目录中添加了一个隐藏文件,这意味着该目录正在被使用,并在程序退出时将其删除。当一个程序想要使用某个目录作为它的工作目录时,它会检查该文件是否存在,如果不存在,它将使用该目录,否则,它将使用带有其进程 ID 的同名目录。实现是:(在 Tcl 中)
开始时:
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
}
这在一次打开一个程序的副本时有效,但是我担心如果同时打开多个程序副本,它们的同步就会出现问题。这意味着两个程序将一起检查文件是否存在,看看它没有都选择那个目录,只有在那之后,他们才会添加文件。如何实现能够在运行的同一程序的多个不同副本之间同步的信号量?