cas
1 http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552013373236132/ 2 3 https://www.cnblogs.com/wzjhoutai/p/6838104.html 4 5 6 7 8 9 #include<stdio.h> 10 #include<string.h> 11 #include<stdlib.h> 12 #include<pthread.h> 13 14 int count = 0; 15 void *func_cas(void*arg) 16 { 17 int i=0; 18 int temp = 0; 19 20 for(i = 0;i < 20000;i++) 21 { 22 while(1) 23 { 24 temp = count; 25 if(__sync_bool_compare_and_swap(&count, temp, temp+1)) 26 break; 27 } 28 29 } 30 } 31 32 void *func(void*arg) 33 { 34 int i=0; 35 36 for(i = 0;i < 20000;i++) 37 { 38 count++; 39 } 40 } 41 42 43 int main() 44 { 45 pthread_t id[10]; 46 int i=0; 47 for(i=0 ;i< sizeof(id)/sizeof(id[0]);i++) 48 { 49 pthread_create(&id[i],NULL,func_cas,NULL); 50 } 51 52 for(i=0 ;i< sizeof(id)/sizeof(id[0]);i++) 53 { 54 pthread_join(id[i],NULL); 55 } 56 57 printf("count = %d\n",count); 58 59 count = 0; 60 61 for(i=0 ;i< sizeof(id)/sizeof(id[0]);i++) 62 { 63 pthread_create(&id[i],NULL,func,NULL); 64 } 65 66 for(i=0 ;i< sizeof(id)/sizeof(id[0]);i++) 67 { 68 pthread_join(id[i],NULL); 69 } 70 printf("\ncount = %d\n",count); 71 } 72 73 74