pthread.h をオーバーライドしてユーザー レベルのスレッド ライブラリを作成する C のプロジェクトに取り組んでいます。私は現在、ミューテックス機能に取り組んでいます。
私の実装では、ミューテックスを構造体のリンクされたリストとして保存します。pthread_mutex_init でやりたいことは、新しく作成されたミューテックスである要素へのポインターを pthread_mutex_t ミューテックス変数に格納することです。しかし、これは可能ですか?ここに私のコードの一部を示します。これで、私が何をしようとしているのかがわかります。
typedef struct mutexList
{
int mid;
struct mutexList *prevMutex;
struct mutexList *nextMutex;
int locked;
struct queueItem *owner;
struct blockedThread *blockedHead;
struct blockedThread *blockedTail;
} mutexElement;
int mutexCounter = 0;
mutexElement *mutexHead = NULL;
mutexElement *mutexTail = NULL;
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
{
mutexElement *newMutex = (mutexElement *) malloc(sizeof(mutexElement));
fprintf(stdout, "***LOG: Creating new mutex.\n");
if(newMutex == NULL)
return ENOMEM;
newMutex->mid = mutexCounter;
mutexCounter++;
newMutex->locked = 0;
newMutex->nextMutex = NULL;
newMutex->blockedHead = NULL;
newMutex->blockedTail = NULL;
if(mutexHead == NULL)
mutexHead = newMutex;
if(mutexTail != NULL)
mutexTail->nextMutex = newMutex;
mutexTail = newMutex;
mutex = (&newMutex);
return 0;
}