众所周知,在 Linux 上的 libpthread 中,互斥锁在 32 位模式和 64 位模式下具有不同的大小。在同一个 Linux 机器上运行的 32 位应用程序和 64 位应用程序之间无法在共享内存中共享互斥锁。(如果我对此有误,请纠正我。)
我们正在尝试在 Linux 中使用 futex 实现我们自己的互斥库,以同时支持 32 位和 64 位应用程序。即,无论库被编译成 32 位还是 64 位,这个互斥体都将具有相同的大小和结构。
此外,我们也想支持“强大的互斥锁”,我们认为这里存在问题。AFAIK,glibc/libpthread 为每个 pthread 创建“robust_list”,并为每个 pthread 互斥体维护 robust_list。这与内核健壮列表功能一起使用,以支持应用程序的健壮互斥锁。
我的问题是:是否可以将我自己的互斥锁附加到由 glibc/libpthread 维护的同一个“robust_list”?如果不是,我是否必须使用不同的健壮列表并将新列表提供给内核?我怀疑如果我推出自己的列表,该应用程序将无法再使用 -pthread。即,我自己的互斥代码将无法与应用程序的 glibc pthread 共存。
任何意见或建议表示赞赏。
谢谢。