如何模拟文件持续读写

#!/bin/bash

function rand(){
    #生成1-6直接的随机数
    min=$1
    max=$(($2-$min+1))
    num=$(date +%s%N)
    echo  $(($num%$max+$min))
}

function RunTest(){
    #创建一个100M文件,复制到目标路径
    dd if=/dev/zero of=$1 bs=1024 count=102400
    cp $1 $2
    rm -rf $1
}

path1=/mnt/USB
path2=/mnt/hd1
path3=/mnt/sata

j=0

while true
do
    
    i=$( rand 1 6 )
    echo $i
        let j+=1

    #1到2
    if [ $i -eq 1 ]
    then
        RunTest $path1/test1 $path2
    elif [ $i -eq 2 ]
    then
    #1到3
        RunTest $path1/test1 $path3
    elif [ $i -eq 3 ]
    then
    #2到3
        RunTest $path2/test2 $path3
    elif [ $i -eq 4 ]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Python 解决读者优先的读者写者问题的代码: ```python import threading import time class ReadWriteLock: def __init__(self): self._read_lock = threading.Lock() self._write_lock = threading.Lock() self._readers = 0 def read_acquire(self): with self._read_lock: self._readers += 1 if self._readers == 1: self._write_lock.acquire() def read_release(self): with self._read_lock: self._readers -= 1 if self._readers == 0: self._write_lock.release() def write_acquire(self): self._write_lock.acquire() def write_release(self): self._write_lock.release() class Reader(threading.Thread): def __init__(self, lock, start_time, duration): threading.Thread.__init__(self) self._lock = lock self._start_time = start_time self._duration = duration def run(self): time.sleep(self._start_time) print("Reader {}: requesting read lock".format(self.name)) self._lock.read_acquire() print("Reader {}: acquired read lock, reading...".format(self.name)) time.sleep(self._duration) self._lock.read_release() print("Reader {}: released read lock".format(self.name)) class Writer(threading.Thread): def __init__(self, lock, start_time, duration): threading.Thread.__init__(self) self._lock = lock self._start_time = start_time self._duration = duration def run(self): time.sleep(self._start_time) print("Writer {}: requesting write lock".format(self.name)) self._lock.write_acquire() print("Writer {}: acquired write lock, writing...".format(self.name)) time.sleep(self._duration) self._lock.write_release() print("Writer {}: released write lock".format(self.name)) if __name__ == "__main__": lock = ReadWriteLock() threads = [] with open("test_data.txt", "r") as f: for line in f: data = line.strip().split() if data[0].lower() == "reader": thread = Reader(lock, int(data[1]), int(data[2])) elif data[0].lower() == "writer": thread = Writer(lock, int(data[1]), int(data[2])) threads.append(thread) for thread in threads: thread.start() for thread in threads: thread.join() ``` 在这个代码中,我们首先定义了一个 `ReadWriteLock` 类,用于管理读写锁。在这个类中,我们使用了两个锁,一个用于控制读锁的获取和释放,另一个用于控制写锁的获取和释放。同时,我们使用了一个计数器 `_readers` 来记录当前有多少个读者正在进行读操作。在 `read_acquire` 方法中,我们首先使用了 `_read_lock` 锁来保证对 `_readers` 计数器的操作是原子的,然后将 `_readers` 计数器加一。如果这是第一个读者进行读操作,那么我们需要使用 `_write_lock` 锁来保证没有写者在进行写操作。在 `read_release` 方法中,我们同样使用了 `_read_lock` 锁来保证对 `_readers` 计数器的操作是原子的,然后将 `_readers` 计数器减一。如果这是最后一个读者完成了读操作,那么我们需要释放 `_write_lock` 锁,以便其他写者可以进行写操作。在 `write_acquire` 方法中,我们直接使用 `_write_lock` 锁来保证没有其他读者或写者在进行操作。在 `write_release` 方法中,我们直接释放 `_write_lock` 锁。 然后,我们定义了 `Reader` 类和 `Writer` 类,分别用于表示读者和写者线程。在这两个类中,我们继承了 `threading.Thread` 类,并重写了 `run` 方法。在 `Reader` 类中,我们首先使用 `time.sleep` 方法来模拟从线程创建到开始进行读操作的时间间隔,然后输出一行提示信息表示当前线程正在请求读锁。接下来,我们调用 `read_acquire` 方法来获取读锁,并输出一行提示信息表示当前线程已经获得了读锁,并开始进行读操作。在读操作完成后,我们调用 `read_release` 方法来释放读锁,并输出一行提示信息表示当前线程已经释放了读锁。在 `Writer` 类中,我们使用类似的方式来模拟写者进行写操作。 最后,我们读取测试数据文件 `test_data.txt`,根据其中的每一行数据来创建对应的读者或写者线程,并将这些线程存储在 `threads` 列表中。然后,我们依次启动每个线程,并等待所有线程执行完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值