-1
我正在學習在c中編寫多線程程序,而我剛剛注意到當我增加給定線程的迭代次數時,每次操作的成本都下降了。多線程平均每次操作的成本
例如,如果我有2個線程,並且每個向全局變量添加一個數字,然後減去相同的數字,如果每個線程都這樣做了1000次,可以說每次操作的成本比每個線程的成本高得多這1000000次。爲什麼是這樣 ?
static int num_iterations = 1;
int opt_yield=0;
void add(long long *pointer, long long value) {
long long sum = *pointer + value;
if (opt_yield)
pthread_yield();
*pointer = sum;
}
struct arg_struct {
long long counter;
long long value;
};
void *aux_add(void *arguments)
{
struct arg_struct *args = arguments;
int i=0;
for (i=0;i<num_iterations;i++)
{
args->value = 1;
add(&args->counter,args->value);
args->value = -1;
add(&args->counter,args->value);
}
}
int main(int argc, char * argv[])
{
printf("\n\n");
int num_threads = 2;
pthread_t t[num_threads];
struct arg_struct args;
args.counter = 0;
int count=0;
for(count=0;count<num_threads;count++)
{
if(pthread_create(&threads[count],NULL,&aux_add, (void *) &args) !=0)
exit();
}
for(count=0;count<num_threads;count++)
{
pthread_join(threads[count], NULL);
}
return 0;
}
每個線程是否改變自己的gloabl變量或者它們使用相同的全局變量?你使用一些同步對象(如互斥體)?或者,也許你的全局變量是原子類型?你可以發佈你的代碼嗎? – Unick
請顯示您用於測試的代碼。 –
我目前沒有使用任何同步方法,因爲我的目標實際上是調查競爭條件並瞭解它們是如何工作的。 –