2014-12-01 85 views
0

我讀了很多關於PTHREAD_MUTEX_INITIALIZER的文章,我明白它做了什麼,但是,我無法理解它是如何做到的?一個宏如何通過將其名稱分配給該變量來初始化一個變量。PTHREAD_MUTEX_INITIALIZER,它是什麼?

我所知道的關於宏的是,他們可以用同樣的功能,如:

#define MAX(a, b) ((a) > (b) ? (a) : (b)) 

現在我們可以使用這個宏像一個函數:MAX(A,B)。

但我們如何編寫能在方式使用宏其PTHREAD_MUTEX_INITIALIZER使用,如:

int x = Macro_Name; 

那麼x會被初始化爲特定值(當一次PTHREAD_MUTEX_INITIALIZER是一個互斥量初始化像分配給它)

請幫我理解這個問題。提前致謝。

回答

0

這裏是從的libpthread的源代碼,從http://git.savannah.gnu.org/cgit/hurd/libpthread.git/tree/sysdeps/generic/bits/mutex.h截取的片段(I僅除去那些unrelevant的問題評論)

/* User visible part of a mutex. */ 
struct __pthread_mutex 
    { 
    __pthread_spinlock_t __held; 
    __pthread_spinlock_t __lock; 
    char *cthreadscompat1; 
    struct __pthread *__queue; 
    struct __pthread_mutexattr *attr; 
    void *data; 
    void *owner; 
    unsigned locks; 
    }; 

# define __PTHREAD_MUTEX_INITIALIZER \ 
    { __PTHREAD_SPIN_LOCK_INITIALIZER, __PTHREAD_SPIN_LOCK_INITIALIZER, 0, 0, 0, 0, 0, 0 } 

從這一點,可以看出的是,宏隱藏一個初始化表示「用戶可見的互斥體部分」的結構列表。結構中的大多數成員(包括指針)都設置爲0,並且內部自旋鎖使用它們自己的初始化宏進行初始化,這可能類似地定義。

當然這只是一個實現,但我想其他實現可能有類似的東西。

相關問題