当前位置: 技术问答>linux和unix
求多线程下文件的读写操作的解决办法
来源: 互联网 发布时间:2016-01-13
本文导语: void lock_set(int fd,int type) { struct flock lock; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; while(1) { lock.l_type = type; if(fcntl(fd,F_SETLK,&lock) == 0) { return; } } } 这个是我用记录锁写的一个函数,但是存在一...
void lock_set(int fd,int type)
{
struct flock lock;
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
while(1)
{
lock.l_type = type;
if(fcntl(fd,F_SETLK,&lock) == 0)
{
return;
}
}
}
这个是我用记录锁写的一个函数,但是存在一个问题,就是while循环会浪费大量的CPU资源。
希望大家给各提示,谢谢
{
struct flock lock;
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
while(1)
{
lock.l_type = type;
if(fcntl(fd,F_SETLK,&lock) == 0)
{
return;
}
}
}
这个是我用记录锁写的一个函数,但是存在一个问题,就是while循环会浪费大量的CPU资源。
希望大家给各提示,谢谢
|
把if(fcntl(fd,F_SETLK,&lock)改变为
fcntl(fd,F_SETLKW,&lock)
F_SETLKW 这是F_SETLK的阻塞版本(命令名中的W表示等待(w a i t))。
fcntl(fd,F_SETLKW,&lock)
F_SETLKW 这是F_SETLK的阻塞版本(命令名中的W表示等待(w a i t))。