Имеем код
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
int var = 0;
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond;
void * increment()
{
while(1)
{
pthread_mutex_lock(&lock);
++var;
pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond);
// sleep(1);
}
}
void * _print()
{
while(1)
{
pthread_mutex_lock(&lock);
pthread_cond_wait(&cond,&lock);
printf("%d\n", var);
pthread_mutex_unlock(&lock);
}
}
int main()
{
pthread_t th1, th2, th3;
pthread_create(&th1,NULL,increment, NULL);
pthread_create(&th2,NULL,_print,NULL);
pthread_join(th2,NULL);
pthread_join(th1,NULL);
return 0;
}
Какого поведения ожидать от программы в зависимости от процессора (архитектура, количество ядер)?
Примеры кусков вывода на разных процессорах:
Раз (intel pentium 4 2 ядра):
498770
498771
498772
498773
498774
498775
498776
498777
498778
498779
498780
498781
! Важно, что числа идут по порядку.
Два(intel core 2 duo):
8413753
8413817
8413880
8413943
8414006
8414067
8414129
8414192
8414259
8414322
8414384
Очень большие провалы.