面试题答案
一键面试可以利用 flock
命令来实现文件锁,从而解决数据竞争问题。以下是示例脚本:
#!/bin/bash
# 定义要操作的文件
FILE="shared_file.txt"
# 获取文件锁
flock -x 200
# 这里开始对文件进行读写操作
echo "进程 $$ 正在写入文件..."
echo "This is some data from process $$" >> "$FILE"
echo "进程 $$ 完成写入操作"
# 释放文件锁
exec 200>&-
echo "进程 $$ 已释放文件锁"
解释:
flock -x 200
:flock
命令用于获取文件锁,-x
表示排他锁(独占锁),200
是一个自定义的文件描述符,用于后续锁定文件。exec 200>&-
:释放由文件描述符200
持有的锁。
在这个脚本中,当多个进程尝试执行时,只有获取到锁的进程才能对文件进行读写操作,其他进程需要等待锁释放后才能继续。这样就避免了数据竞争问题。