เนื่องจากอ่าน code ภาษา C โดยทั่วไป(textbook,stackoverflow) จะไม่ค่อยได้เจอคำว่า volatile เท่าไร กับประสบการณ์อันน้อยนิด ทำให้ทำข้อสอบข้อนี้ไม่ได้
แต่พอไปหาบทความเรื่องนี้ ก็ไปเจอ
แล้วก็ไปเจอ http://lwn.net/Articles/233482/ จากการอ้างอิงบทความข้างต้น ได้ใจความว่า...
 
If the memory barriers are right, then the "volatile" doesn't matter.

And if the memory barriers aren't right, then "volatile" doesn't help.

Using "volatile" in data structures is basically _always_ a bug.

The only acceptable uses for "volatile" are:

 - in _code_, i.e., for things like the definition of "readb()" etc, where we
   use it to force a particular access.
 - with inline asms
 - on "jiffies", for stupid legacy reasons

Basically, a volatile on a data structure can NEVER be right. If it makes
a difference, it's a sign of improper locking.

And the reason I refuse to apply that part of the patch is that anybody
who even _thinks_ that they make a difference is horribly and utterly
confused, and doesn't understand locking.

So please _never_ use them like this.
สรุปง่ายๆ ถ้ากำหนดพวก memory barriers ถูกต้อง volatile ก็ไม่สำคัญ และก็ไม่ควรใช้เป็นอย่างยิ่ง Foot in mouth
แต่ใช้แค่ในบางโอกาศเท่านั้น ที่จำเป็นจริงๆ ที่เมื่อไม่ต้องการให้ compiler ขณะที่ compile แบบ optimize code ทำการเปลี่ยนตัวแปรดังเดิมที่ประกาศไว้
ทำให้ทำข้อนี้ไม่ได้ เลยปล่อยว่างทั้งข้อเลย Tongue out

Comment

Comment:

Tweet