求多线程下文件的读写操作的解决办法
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资源。
希望大家给各提示,谢谢
------解决方案--------------------把if(fcntl(fd,F_SETLK,&lock)改变为
fcntl(fd,F_SETLKW,&lock)
F_SETLKW 这是F_SETLK的阻塞版本(命令名中的W表示等待(w a i t))。