在用aardio做后端等程序中,
都要考虑多请求并发、多线程并发、内存消耗、CPU消耗等各种各样的情况,
其中独占模式读写文件是用得比较多的,
今天的例子是并发场景下的独占模式读写文件是怎么实现的?
在aardio中,使用 io.open() 打开文件时,
第三个参数如果设置为 0x10 就是独占读写模式,
此时只有本进程可以对此文件进行读写,
其它外进程如记事本等对此文件进行打开操作会提示打开错误.
有了独占模式,就可以避免在并发的场景下,
在写到一半时被别的线程或进程读入,
或是才读到一半的时候别的线程或进程要进行写操作,
有了独占模式,各线程或进程就需要排队进行操作,
避免了很多问题.
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio教程 www.jianma123.com 简码编程";right=389;bottom=246)
winform.add(
button={cls="button";text="独占模式打开读写此文件";left=90;top=187;right=253;bottom=218;z=2};
button2={cls="button";text="关闭此文件";left=268;top=187;right=354;bottom=218;z=4};
editLog={cls="edit";left=74;top=51;right=378;bottom=161;autohscroll=false;edge=1;multiline=1;vscroll=1;z=3};
editPath={cls="edit";text="C:\Users\Administrator\Desktop\user.txt";left=74;top=17;right=378;bottom=43;edge=1;multiline=1;z=1};
static={cls="static";text="文件路径:";left=10;top=21;right=69;bottom=40;align="right";transparent=1;z=5};
static2={cls="static";text="提示:";left=10;top=53;right=69;bottom=72;align="right";transparent=1;z=6}
)
/*}}*/
var file,err;
winform.button.oncommand = function(id,event){
var path = winform.editPath.text;
file,err = ..io.open(path,"w+b",0x10/*独占读写*/);
if(!file){
winform.editLog.print("无此文件",file,err);
}else {
winform.editLog.print("已打开此文件",file,err);
winform.editLog.print("此时再用记事本等其它编辑器打开此文件会弹出无法打开的错误提示");
}
}
winform.button2.oncommand = function(id,event){
file.close();
winform.editLog.print("已关闭此文件");
}
winform.show();
win.loopMessage();