C语言多线程变量自增问题

描述不清楚,请直接看代码和结果,谢谢!

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; }

猜测应该是顺序输出0123401234,但是结果不是这样,运行一小下内存就溢出了.请问是怎么回事啊?

阅读 2.4k
2 个回答

你的代码在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
......

不知你说是内存溢出指的是什么?什么环境条件?

在windows下是存在问题的.windows下需要include windows.h不然Sleep函数会默认使用winbase.h里的原型..而windows下的Sleep和linux是不一样的..所以rear的地址会变,所以跑一跑就超过int类型的大小限制了,就溢出了.

谢谢老兄!这个问题已经解决了.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题