如何使用这些功能?
我已经在全球范围内宣布上锁。

pthread_spinlock_t lock;

spinlock也在本地初始化。
pthread_spin_init(&lock, 1); // non-zero as pshared for IPC

但现在我想锁定我的临界整数并增加它。
我有多个进程在一个循环中运行:
while(0 != pthread_spin_trylock(&lock));
criticalInt += 1;
pthread_spin_unlock(&lock);

为什么不起作用?
另外,如何使用以下函数?
pthread_spin_lock(&lock);

编辑:
for (i=0; i < NUM_CHILDREN; i++) {

   pid[i] = fork();
   if (pid[i] == -1) { return EXIT_FAILURE; }
   if (pid[i] == 0) {
   while (criticalInt < MAXCOUNT) {
      pthread_spin_lock(&lock);
      criticalInt += 1;
      pthread_spin_unlock(&lock);
      count++;
   }
   printf("Process %i counted %i\n", i, count);

}

对于1000000的MAXCOUNT,hat会产生以下输出:
    Process 3 counted 687858
    Process 0 counted 815657
    Process 1 counted 640191
    Process 2 counted 744340

实际上总共应该是1000000。但事实并非如此。
如果我完全删除锁,也会得到类似的结果。

最佳答案

要使任何与POSIX线程相关的工作正常,您需要使用pthread_create()来启动一个新线程。这里,您使用的是fork(),它将启动一个与父进程不共享相同地址空间的新进程。

09-28 08:44