10.4.2 匿名synchronized
由对象控制的临界区还有一种麻烦情况,那就是有时候没有对象可以被用做锁。在这种情况下,你可以在局部作用域中声明一个静态对象,或者,更好的做法是,在临界区所在的文件中的匿名名字空间内声明一个全局对象。你也可以基于SYNCHRONIZED()宏使用的技术写一个SYNCHRONIZED_ANON()宏,它包含一个局部静态对象,但是这样的话你就可能会遇到一个可能的竞争条件,即两个或多个线程可能会同时试图执行该静态对象的"仅一次"的构造过程。这种情况并非没办法消除,我们将会在下一章讨论静态对象时看到解决这个问题所采用的技术,但最好的做法还是避开这个问题。因此,使用名字空间范围内的对象在这里是最佳选择。