【问题标题】:global variable not retaining its value in thread全局变量未在线程中保留其值
【发布时间】:2012-12-30 16:12:45
【问题描述】:

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

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 */
    }

}

【问题讨论】:

  • 该代码中没有线程。

标签: c multithreading fork


【解决方案1】:

这是一个多进程服务器而不是多线程,全局数据不在父进程和子进程之间共享,它在某个点被重复,如果你想在多个进程之间共享数据,你应该查看shared memory或者@ 987654322@ 如果您想使用线程(共享其父内存)。如果你的编译器支持C11,你也可以使用&lt;threads.h&gt;

【讨论】:

  • 或者 &lt;threads.h&gt; 如果 C11 可用(尽管我仍然更喜欢 pthreads)。
【解决方案2】:

您使用的是多进程,而不是多线程

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多