鍍金池/ 問答/C  Linux/ C語言多線程變量自增問題

C語言多線程變量自增問題

描述不清楚,請直接看代碼和結(jié)果,謝謝!

void * product(void *arg){

int rear = 0 ;
while(1) {
    rear = (rear + 1)%5;
    printf("p:%d\n",rear);
    Sleep(500);
    } } 

int main(void) {

pthread_t pid;
pthread_create(&pid,NULL,product,NULL);
pthread_join(pid,NULL);
return 0; }

猜測應(yīng)該是順序輸出0123401234,但是結(jié)果不是這樣,運行一小下內(nèi)存就溢出了.請問是怎么回事啊?

回答
編輯回答
話寡

你的代碼在linux上運行沒有任何問題

#include <stdio.h>  
#include <pthread.h>  

void * product(void *arg){
    int rear = 0 ;
    while(1) {
        rear = (rear + 1)%5;
        printf("p:%d\n",rear);
        sleep(1);
    } 
}

int main(void) {
    pthread_t pid;
    pthread_create(&pid,NULL,product,NULL);
    pthread_join(pid,NULL);
    return 0; 
}

編譯

gcc pthread.c -pthread

輸出

p:0
p:1
p:2
p:3
p:4
p:0
p:1
p:2
p:3
p:4
......

不知你說是內(nèi)存溢出指的是什么?什么環(huán)境條件?

2018年7月23日 20:46
編輯回答
黑與白

在windows下是存在問題的.windows下需要include windows.h不然Sleep函數(shù)會默認(rèn)使用winbase.h里的原型..而windows下的Sleep和linux是不一樣的..所以rear的地址會變,所以跑一跑就超過int類型的大小限制了,就溢出了.

謝謝老兄!這個問題已經(jīng)解決了.

2018年9月22日 12:11