English 中文(简体)
文档洛克诉Semaphores
原标题:File Locking vs. Semaphores

仅仅出于好奇,如何在流程中实现对短链氯化石蜡的同步? <代码>sem*(2) 系统电话的家属似乎有很强的接口,而有三种途径锁定文档:fcntl(<>,flock(>和lockf(>>)。

内部差异(如果有)是什么,以及你如何证明使用这些差异是合理的?

最佳回答

也没有。 <代码>pthread_*的实际版本(例如:phtread_mutex_t)均允许通过shm_open在共同部分内设定变量。 你们只是要把一些额外的参数放在内心电话上。

Don t use semaphores (sem_t) 如果你不需要,那么他们就太低,被国际独立组织等干预。

Don lock 间控制。 对此没有作出说明。 尤其是,你没有可能冲积诸如锁等元数据,因此,你从未知道何时会发现24小时/锁。

问题回答

正如Dar Dust所指出的,你们正遭受丰富历史的丰富选择。 值得我作出决定的树象这样:

当只有一个过程/路面时,可以随时接通。

当两个或两个以上(但还是有限的)进程/翻新能够使用资源时,使用ema。

除非你真的需要,否则会使用苯胺磷,例如,UNDO、PID最后一次手术等。

使用文件锁定,或者如果上述文件不符合你的要求。

不同的锁定/热心执行都在不同制度中生动。 关于系统五,您有<代码>semget/semop, POSIX界定了与sem_initsem_wait不同的实施。 <代码>flock在我可以发现的范围内源自4.2BSD。

由于它们都具有一定的重要性,因此现在它们都支持它们使港口变得容易。 此外,flock 是一个横向(不论是锁定的还是未锁定的),但sem*功能(SysV和POSIX)是闪电:它们允许申请同时提供几个程序,例如,你可以同时利用4个过程的资源,同时使用ema光。 你们可以实施一只ema光,而不是另一轮。 我记得,在出色的上,“推进UNIX Program” Marc J. Rochkind先生展示了如何通过幻觉在各种过程之间传送数据(非常低的效率,他只是证明可以这样做)。 但我看不出在效率方面有任何可靠之处。

我更喜欢“你想要的东西”。

一种潜在的重大差异可能是资源分配的公平。 我并不了解<代码>的家庭/semget/semop的详细执行情况,但我怀疑,在时间安排方面,该编码通常作为一种“传统”的ema。 总的说来,我认为,释放的胎面是在FFO的基础上处理的(首先释放了一只等待ema光的胎)。 我不认为这样做会因为我怀疑(只是猜测)处理工作没有在油轮一级进行而发生。

我已坐在一旁,为国际捕鲸委员会的目的测试ema磷。 因此,我对两种情况进行了比较(一种使用<条码>mop,另一种使用<条码>。 我确实试过了不起的男子,而且只是听说申请。 共有的ema虫被用于 start开。 在进行混合测试时,这两个过程几乎在yn子中完成了300万 lo。 另一方面,僵局几乎是不公平的。 一个进程通常会结束,而另一个进程只完成了一半的休息时间。

轮.测试的 lo像如下。 <代码>semwait和semsignal功能只是<代码>semop电话的包装。

   ct = myclock();
   for ( i = 0; i < loops; i++ )
      {
      ret = semwait( "test", semid, 0 );
      if ( ret < 0 ) { perror( "semwait" ); break; }

      if (( i & 0x7f ) == 0x7f )
         printf( "
%d%%", (int)(i * 100.0 / loops ));

      ret = semsignal( semid, 0 );
      if ( ret < 0 ) { perror( "semsignal" ); break; }
      }
   printf( "
semop time: %d ms
", myclock() - ct );

这两种方法的总操作时间大致相同,尽管锁定版实际上较快,有时是因为时间安排不公平。 第一个进程一旦结束,另一个进程将可无争议地进入约150万个区域,而且速度极快。

在进行无争议时(获得和释放锁的单一程序), version状的版本更快。 它花了约2秒钟的100万个频率,而锁定版则需要约3秒钟。

下表是:

[]$ uname -r
2.6.11-1.1369_FC4smp




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签