用C语言封装线程API

问题描述 投票:0回答:1

我想用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);
}
multithreading mutex segment
1个回答
0
投票

你的代码从来没有分配 new 的值,但随后又试图设置 new->idజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ id 何许人也 new 指的是。但是 new 根本就没有指向任何东西。

你必须指定 new 在你尝试使用它的值之前。

你知道如何获取mutex的内存地址吗?

使用 &mutex 来获取mutex的内存地址,就像其他任何东西一样。很有可能,您已经有了内存地址,因为一个mutex不能被复制,所以通常您已经在传递它的内存地址。

© www.soinside.com 2019 - 2024. All rights reserved.