1<html lang="en"> 2<head> 3<title>Synchronization - Using the GNU Compiler Collection (GCC)</title> 4<meta http-equiv="Content-Type" content="text/html"> 5<meta name="description" content="Using the GNU Compiler Collection (GCC)"> 6<meta name="generator" content="makeinfo 4.13"> 7<link title="Top" rel="start" href="index.html#Top"> 8<link rel="up" href="Objective_002dC.html#Objective_002dC" title="Objective-C"> 9<link rel="prev" href="Exceptions.html#Exceptions" title="Exceptions"> 10<link rel="next" href="Fast-enumeration.html#Fast-enumeration" title="Fast enumeration"> 11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> 12<!-- 13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 152010 Free Software Foundation, Inc. 16 17Permission is granted to copy, distribute and/or modify this document 18under the terms of the GNU Free Documentation License, Version 1.3 or 19any later version published by the Free Software Foundation; with the 20Invariant Sections being ``Funding Free Software'', the Front-Cover 21Texts being (a) (see below), and with the Back-Cover Texts being (b) 22(see below). A copy of the license is included in the section entitled 23``GNU Free Documentation License''. 24 25(a) The FSF's Front-Cover Text is: 26 27 A GNU Manual 28 29(b) The FSF's Back-Cover Text is: 30 31 You have freedom to copy and modify this GNU Manual, like GNU 32 software. Copies published by the Free Software Foundation raise 33 funds for GNU development.--> 34<meta http-equiv="Content-Style-Type" content="text/css"> 35<style type="text/css"><!-- 36 pre.display { font-family:inherit } 37 pre.format { font-family:inherit } 38 pre.smalldisplay { font-family:inherit; font-size:smaller } 39 pre.smallformat { font-family:inherit; font-size:smaller } 40 pre.smallexample { font-size:smaller } 41 pre.smalllisp { font-size:smaller } 42 span.sc { font-variant:small-caps } 43 span.roman { font-family:serif; font-weight:normal; } 44 span.sansserif { font-family:sans-serif; font-weight:normal; } 45--></style> 46<link rel="stylesheet" type="text/css" href="../cs.css"> 47</head> 48<body> 49<div class="node"> 50<a name="Synchronization"></a> 51<p> 52Next: <a rel="next" accesskey="n" href="Fast-enumeration.html#Fast-enumeration">Fast enumeration</a>, 53Previous: <a rel="previous" accesskey="p" href="Exceptions.html#Exceptions">Exceptions</a>, 54Up: <a rel="up" accesskey="u" href="Objective_002dC.html#Objective_002dC">Objective-C</a> 55<hr> 56</div> 57 58<h3 class="section">8.8 Synchronization</h3> 59 60<p>GNU Objective-C provides support for synchronized blocks: 61 62<pre class="smallexample"> @synchronized (ObjCClass *guard) { 63 ... 64 } 65</pre> 66 <p>Upon entering the <code>@synchronized</code> block, a thread of execution 67shall first check whether a lock has been placed on the corresponding 68<code>guard</code> object by another thread. If it has, the current thread 69shall wait until the other thread relinquishes its lock. Once 70<code>guard</code> becomes available, the current thread will place its own 71lock on it, execute the code contained in the <code>@synchronized</code> 72block, and finally relinquish the lock (thereby making <code>guard</code> 73available to other threads). 74 75 <p>Unlike Java, Objective-C does not allow for entire methods to be 76marked <code>@synchronized</code>. Note that throwing exceptions out of 77<code>@synchronized</code> blocks is allowed, and will cause the guarding 78object to be unlocked properly. 79 80 <p>Because of the interactions between synchronization and exception 81handling, you can only use <code>@synchronized</code> when compiling with 82exceptions enabled, that is with the command line option 83<samp><span class="option">-fobjc-exceptions</span></samp>. 84 85<!-- ========================================================================= --> 86 </body></html> 87 88