无法理解线程的互斥使用情况

时间:2016-04-02 21:07:31

标签: c multithreading pthreads mutex shared-memory

我正在运行以下代码(底部的代码),以了解如何使用线程和互斥锁。从我认为互斥锁的工作方式来看,一旦有一个被pthread_mutex_lock标记的锁定代码段,那么任何其他线程都无法前进,直到该线程被解锁。所以,如果是这种情况,我会得到这个输出:

TEST
0
TEST
1
TEST
2
TEST
3
TEST
4

但我得到这样的输出(每次运行不同):

TEST
0
TEST
1
TEST
2
TEST
TEST
3
4

所以我想知道我是否理解互斥锁是如何工作的,或者我是否错误地使用它们。无论哪种方式,我将如何获得我期望使用线程的输出?感谢您提前获得所有帮助。

int counter;
pthread_mutex_t lock;

void * threadAction(void * unused);

int main()
{
  pthread_t tid[5];
  int i = 0;
  counter = -1;
  for(i = 0; i < 5; i++
  {
    pthread_create(&tid[i], NULL, threadAction, NULL);
  }

  for(i = 0; i < 5; i++
  {
    pthread_join(tid[i], NULL);
  }

}

void * threadAction(void * unused)
{   
  pthread_mutex_lock(&lock); 
  printf("TEST\n");
  counter++;
  printf("%d\n", counter);
  pthread_mutex_unlock(&lock);
  return NULL;
}

0 个答案:

没有答案