鍍金池/ 問答/C  Linux/ C語(yǔ)言多線程使用同一線程函數(shù),傳遞的結(jié)構(gòu)體參數(shù)會(huì)相互影響

C語(yǔ)言多線程使用同一線程函數(shù),傳遞的結(jié)構(gòu)體參數(shù)會(huì)相互影響

結(jié)構(gòu)參數(shù)均為局部變量。我希望達(dá)到的效果是每個(gè)子線程并行執(zhí)行,相互不影響執(zhí)行狀態(tài)。

下面代碼是在多線程中執(zhí)行的:
線程二

pthread_t listid_thread[l_size];
for (int _i = 0; _i < l_size; _i++)
{
            struct ListingInfos listing_infos;
            //創(chuàng)建線程
            int temp;
            if ((temp = pthread_create(&listid_thread[_i], NULL, ListThread, &listing_infos)) != 0) {
                printf("【%d】listid_thread【%d】創(chuàng)建失敗!\n", cp, _i);
            }
            else {
                printf("【%d】listid_thread【%d】被創(chuàng)建\n", cp, _i);
            }

}
for (int _i = 0; _i < l_size; _i++)
{
/*等待線程結(jié)束*/
    if (listid_thread[_i] != 0)
    {           
        //pthread_join(listid_thread[_i], NULL);
        pthread_detach(listid_thread[_i]);
        printf("【%d】listid_thread【%d】已經(jīng)結(jié)束\n", cp, _i);
    }
}
        

以上代碼是本身是在多線程,又會(huì)循環(huán)創(chuàng)建多線程,創(chuàng)建以下的線程
線程三

void *ListThread(void *arg)
{
    struct ListingInfos *listing_infos;
    listing_infos = (struct ListingInfos *)arg;
    printf("【%d】listid_thread【%d】線程中獲取ID:%d\n", listing_infos->cp, listing_infos->thread, listing_infos->Id);
    ...........
}

我期待的以上代碼的打印結(jié)果為 每次的ID不一樣,例如1、2、3,但是由于在線程三種執(zhí)行時(shí)間較長(zhǎng),打印出來的結(jié)果不是期待的結(jié)果,例如:2、2、3

請(qǐng)問如何解決多線程中,不同線程之間的相互影響參數(shù)的問題

回答
編輯回答
冷溫柔

https://zhidao.baidu.com/ques... 我的問題答案已經(jīng)在這里找到解決方法了

2018年1月30日 12:28
編輯回答
澐染

這代碼中所有線程用的大概是同一塊內(nèi)存. 可以試試把listing_infos 改成數(shù)組, 并放到for外面分配.

2018年2月9日 02:30