全局变量不保留其在线程中的值

我创建了一个multithreading服务器,它有一个指向链表的全局指针,在线程中我试图插入一些数据,但是那些数据(我插入的)没有保留,可能是在全局值没有保留的线程中。 我使用以下代码(这是最简单的版本。)

struct node { int cn; // struct node *next; }; /*GLOBAL VARIABLES*/ struct node *start; //Global pointer to Linked List /* END */ int main(int argc, char *argv[]) { start = (struct node *)malloc(sizeof(struct node)); start -> cn =0; int pid; /* Declaration of Server goes here */ printf("Server Running ...\n"); while (1) { /* accepting socket*/ pid = fork(); if (pid < 0) error("ERROR on fork"); if (pid == 0) { close(serverSocket); dostuff(childSocket,start); exit(0); } else close(childSocket); } return 0; } void dostuff (int sock, struct node *pointer){ returnStatus = read(sock, &requestToJoin, sizeof(int)); if (returnStatus < 0) error("ERROR reading from socket"); else{ /* Insert Data to global Pointer */ } } 

这是一个多进程服务器而不是multithreading,全局数据不会在父进程和子进程之间共享它在某个点被复制,如果你想在多个进程或pthread之间共享数据,你应该查看共享内存使用线程(分享父母的内存)。 如果您的编译器支持C11,您也可以使用

您使用的是多进程而不是multithreading

线程共享全局内存(即全局变量)但进程不共享内存(除非您设置共享内存)并且每个都有自己的全局变量集。

你正在使用fork()。 它创建的进程是您实际进程的完全副本,但它不共享相同的内存。 如果使用线程,所有内存寻址都将被共享,您需要同步访问共享内存位置以满足数据的一致性。