# About critical section

**URL:** <https://www.ruby-forum.com/t/about-critical-section/147765>\
**Category:** Ruby\
**Created:** [September 5, 2008, 7:32am UTC](https://www.ruby-forum.com/t/about-critical-section/147765 "2008-09-05T07:32:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![difei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/a4c791/32.png) [@difei](https://www.ruby-forum.com/u/difei)\
**Post date:** [September 5, 2008, 7:32am UTC](https://www.ruby-forum.com/t/about-critical-section/147765/1 "2008-09-05T07:32:27Z")

</div>

Greetings all,

I post a similar message to rails mailing list since I encountered  
this problem during development of a rails application, but now the  
problem is more ruby specific, so I decided to post here.

Basically, I have to implement a critical section like this to avoid  
race condition:

/\* begin critical section _/  
loop do  
filename = generate\_filename  
break unless File.exist?(filename)  
end  
File.new(filename).flock  
/_ end \*/  
write\_to\_filename

Somebody said I could open a file with exclusive lock, but I do not  
know an atomic way. Could anyone help? Thanks alot!

Difei

---

<div class="post-metadata">

**Author:** ![difei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/a4c791/32.png) [@difei](https://www.ruby-forum.com/u/difei)\
**Post date:** [September 5, 2008, 8:28am UTC](https://www.ruby-forum.com/t/about-critical-section/147765/2 "2008-09-05T08:28:24Z")

</div>

Difei Z. wrote:

> Somebody said I could open a file with exclusive lock, but I do not  
> know an atomic way. Could anyone help? Thanks alot!

man 2 open, there is a O\_EXCL

---

<div class="post-metadata">

**Author:** ![difei](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/a4c791/32.png) [@difei](https://www.ruby-forum.com/u/difei)\
**Post date:** [September 5, 2008, 9:02am UTC](https://www.ruby-forum.com/t/about-critical-section/147765/3 "2008-09-05T09:02:06Z")

</div>

Difei Z. wrote:

> Basically, I have to implement a critical section like this to avoid  
> race condition:

I think you can use Mutex. First

require ‘thread’  
$mutex=Mutex::new

and then

$mutex.synchronize  
{

# your critical section

}

TPR.
