我使用 GLib/GObject 并面临以下问题:
我有一个类my_class
在运行时将在多个线程中具有多个对象实例,其中每个对象将存在于单个线程中(因此线程和对象之间存在 1:1 的关系)。
但是,该对象将访问共享资源,我需要锁定以保护对该资源的访问。现在,我需要一个全局互斥锁(GMutex
GLib 世界中的一个)实例,它可供所有线程/对象锁定。
我目前的方法是在产生线程之前创建该互斥锁,并在构造函数中传递该全局互斥锁。但我不喜欢这种方法。在创建线程之前,互斥锁与调用代码无关——它只是功能所必需的,因此my_class
应该只是my_class
干净的 OO 设计的一部分。
但是如何从内部创建单个互斥锁my_class
?我可以创建一个static GMutex *global_mutex
并将其作为全局变量,在所有线程之间共享。但是何时/如何打电话g_mutex_new()
?我想把它放在 的构造函数中my_class
,但代码只需要运行一次。为了实现这一点,我首先需要锁定,而我面临着一个鸡蛋问题。