我正在读取pthreads库的头文件,并在bits/pthreadtypes.h中找到了互斥体(和其他类型)的这个特定定义:
typedef union
{
struct __pthread_mutex_s
{
int __lock;
unsigned int __count;
int __owner;
/* KIND must stay at this position in the structure to maintain
binary compatibility. */
int __kind;
unsigned int __nusers;
__extension__ union
{
int __spins;
__pthread_slist_t __list;
};
} __data;
char __size[__SIZEOF_PTHREAD_MUTEX_T];
long int __align;
} pthread_mutex_t;
Run Code Online (Sandbox Code Playgroud)
它不完全是这样,但为了清晰起见我简化了它.在头文件和实现文件中创建一个具有两个不同定义的结构,实现真正的结构定义,标题只是真实结构大小的字符缓冲区,用作隐藏实现的技术(opaque类型) )但在调用malloc或在堆栈中分配对象时仍然分配正确的内存量.
这个特殊的实现使用了一个union并且仍然暴露了struct的结构和字符缓冲区,但是在隐藏类型方面似乎没有提供任何好处,因为结构仍然暴露,并且二进制兼容性依赖于结构没有变化.