在64位Linux中,sem_t占用32字节,但是通过futex实现,只需要8字节就足够了(glibc sem_post),这是真的吗?如果是真的,为什么要浪费这些字节呢?
实际上,我想使用一个自定义的信号量实现,只使用8字节,因此可以将一个信号量用于一个数据条目。但我不确定glibc实现中的其他字节是否只是填充。
只是出于我的兴趣,我不打算在工作中使用自定义信号量。
在64位Linux中,sem_t占用32字节,但是通过futex实现,只需要8字节就足够了(glibc sem_post),这是真的吗?如果是真的,为什么要浪费这些字节呢?
实际上,我想使用一个自定义的信号量实现,只使用8字节,因此可以将一个信号量用于一个数据条目。但我不确定glibc实现中的其他字节是否只是填充。
只是出于我的兴趣,我不打算在工作中使用自定义信号量。
glibc
需要在不同的Linux内核和不同的线程模块之间进行移植。因此,在其他系统需要额外的空间进行簿记时,它为该结构保留了32字节的空间(4个机器字)。如果您想使用futexes自己做一些事情,那么请继续;正如您所说,您只需要8个字节就可以使用futex完成它。