0

Cプログラミングに関する。

私がこれを行うと仮定します:

struct myStruct
{
    pthread_mutex_t myMutex;
    sem_t mySemaphore;
};

`

そして、適切なサイズをmallocし、セマフォを初期化します。

myStruct *create_myStruct()
{
    myStruct *temp; 

    temp = (myStruct *) malloc(sizeof(myStruct));
    sema_init(&sema, 0, 0);
    pthread_mutex_init(&(temp->myMutex), NULL);
    return temp;
}

セマフォを手動で破棄する必要がありますか、それとも無料で呼び出すだけで十分ですか?

4

1 に答える 1

4

ミューテックスセマフォの両方を破棄する必要があります。これは、メモリを解放する前に行う必要があります。そうしないと、リソースリークが発生し、プログラムの動作が未定義になります。

オブジェクトとそれらが表す状態、およびオブジェクトが格納されているメモリを精神的に区別する必要があります。どちらももう一方のことを知りません。両方を個別に(および逆の順序で)セットアップおよび破棄する必要があります。

于 2012-11-01T13:08:33.233 に答える