#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <pthread.h>
#define G_THREAD_NUM 5
void* add_main(void* arg);
void* del_main(void* arg);
void print_glo();
unsigned long long g_uint64_n;
unsigned long long g_tmp1 = 0;
unsigned long long g_tmp2 = 0xffffffffffffffffLL;
void* write_main(void* arg)
{
unsigned long long tmp = g_tmp1;
while(1){
g_uint64_n = tmp;
}
return NULL;
}
void* read_main(void* arg)
{
while(1){
g_uint64_n = g_tmp2;
}
return NULL;
}
void print_glo()
{
unsigned long long tmp;
unsigned int l;
unsigned int r;
while(1){
tmp = g_uint64_n;
l = tmp >> 32;
r = tmp;
if(l != r){
printf("left:%x,right:%x\n", l, r);
printf("assert:%llx\n", tmp);
}
}
}
int main()
{
int i;
pthread_t add[G_THREAD_NUM];
pthread_t del[G_THREAD_NUM];
for(i=0; i<G_THREAD_NUM; i++)
pthread_create(&add[i], NULL, write_main, NULL);
for(i=0; i<G_THREAD_NUM; i++)
pthread_create(&del[i], NULL, read_main, NULL);
print_glo();
return 0;
}