测试平台:sparc(Solaris )、x86(Solaris)、x86(Linux)
#include
#include
#include
#include
#include
#include
#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