-4

我想在pthread_mutex_t结构中添加一个新字段。pthread.h为此目的更改头文件是否足够?但我想这不是一个好主意,因为那样我会篡改编译器附带的头文件。

还有什么其他方法可以做到这一点?

我这样做是因为我是 LD_PRELOADingpthread_mutex_lock并且我的自定义pthread_mutex_lock需要一个额外的字段pthread_mutex_t。当然我可以编写代码以便使用除 之外的结构pthread_mutex_t,但我不希望用户修改其程序。

4

2 回答 2

4

如果不重新编译可能依赖它的所有内容,就无法扩展pthread_mutex_t结构。这意味着您的所有系统库、第三方库和您的应用程序。根本没有办法解决这个问题。

你能解释一下你试图通过这样做解决什么实际问题吗?这可能会让某人给你一个可以接受的答案。

于 2012-06-03T18:18:09.593 回答
0

这是一个长镜头。但是您可以执行以下操作:

struct my_pthread_mutex_t {
   pthread_mutex_t mutex;
   ...
   /* insert fields here */
   ...
};

这应该允许您为pthread_mutex_t和拥有相同的地址my_pthread_mutex_t。因此,如果一个函数知道这一点hack(也就是说,如果结构声明在范围内),您可以强制转换为 my_pthread_mutex_t,否则您可以使用与简单 pthread_mutex_t 相同的东西。

这样做的好处是,通过扩展这样的结构,您不必重新编译任何代码,并且您不会冒险为合法使用的其他程序搞砸事情pthread_mutex_t

于 2012-06-03T23:53:17.327 回答