我想用C语言来封装线程API。
我将存储这些值,并通过FIFO发送给其他程序
我的问题是,我不明白为什么它使段故障。我只是做了打印...
我用餐饮哲学家的问题来使用封装函数。
我的代码有什么问题吗?
还有你知道如何获取mutex的内存地址吗?
int pthread_mutex_lock(pthread_mutex_t *mutex){
send *new;
pthread_mutex_lock_new = dlsym(RTLD_NEXT, "pthread_mutex_lock") ;
new->id = mutex->__data.__owner;
new->mutex = mutex;
new->lock = 1;
printf("lock id: %d mutex: %p lock: %d", new->id, new->mutex, new->lock);
return pthread_mutex_lock_new(mutex);
}
int pthread_mutex_unlock(pthread_mutex_t *mutex){
send *new;
pthread_mutex_unlock_new = dlsym(RTLD_NEXT, "pthread_mutex_unlock") ;
//new->id = mutex->__data.__owner;
new->mutex = mutex;
new->lock = 1;
printf("lock id: %d mutex: %p lock: %d", new->id, new->mutex, new->lock);
return pthread_mutex_unlock_new(mutex);
}
你的代码从来没有分配 new
的值,但随后又试图设置 new->id
జజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ id
何许人也 new
指的是。但是 new
根本就没有指向任何东西。
你必须指定 new
在你尝试使用它的值之前。
你知道如何获取mutex的内存地址吗?
使用 &mutex
来获取mutex的内存地址,就像其他任何东西一样。很有可能,您已经有了内存地址,因为一个mutex不能被复制,所以通常您已经在传递它的内存地址。