私はスレッド ライブラリの構築に取り組んでいますが、何らかの理由で単純な malloc の問題が発生し、現在は修正できません。私はそれが欠けているだけの単純なものだと確信しています。
私の main.c には、次のコードがあります。
//declare testSem
tasem_t testSem;
int main(int argc, char **argv){
ta_libinit();
//initialize testSem
ta_sem_init(&testSem, 5);
//wait test
ta_sem_wait(&testSem);
私のスレッドライブラリの関連コードは次のとおりです。
void ta_sem_init(tasem_t *sema, int value)
{
//malloc the semaphore struct
sema = malloc(sizeof(tasem_t));
//error check
if(sema == NULL)
{
printf("could not malloc semaphore");
exit(0);
}
//initialize with the given value
sema->val = value;
printf("SemaVal = %i\n", sema->val);
}
void ta_sem_wait(tasem_t *sema)
{
printf("SemaVal = %i\n", sema->val);
if(sema->val <= 0)
{
//not done yet
printf("SWAPPING\n");
}
else
{
printf("SemaVal = %i\n", sema->val);
sema->val = sema->val + 1;
}
}
私のヘッダーファイルの構造体は次のとおりです。
//struct to store each semas info
typedef struct tasem_t_struct
{
//value
int val;
//Q* Queue
//int numThreads
}tasem_t;
これから得られる出力は次のとおりです。
SemaVal = 5 SemaVal = 0 スワッピング
明らかに、スコープ外に出ると内部の値が失われるため、構造体を正しく malloc していません。簡単なことを忘れているに違いないことはわかっています。何か案は?