g++ main.cpp -fpermissive -lpthread -O0
#include
#include
#include
#include
#include
#include
#include
#include
#include
pthread_t thread_id;
static pthread_mutex_t share_mutex = PTHREAD_MUTEX_INITIALIZER;
//std::atomic
int count=0;
int count1[4000];
int count2[4000];
int count3;
sem_t m_vp1_sem;
#define barrier() __asm__ __volatile__( "": : :"memory")
#define dmb() __asm__ __volatile__( "dmb": : :"memory")
volatile int m_exit=0;
void thread_routine (void *arg)
{
int j=0;
while(!m_exit){
j++;
count=0;
usleep(100000);
//pthread_mutex_lock(&share_mutex);
for(int i=0;i<4000;i++){
count1[i]=j;
count2[i]=j;
count3=j;
}
//printf("1\n");
//pthread_mutex_unlock(&share_mutex);
//dmb();
//barrier();
count=1;
if(count){
//printf("*\n");
//sem_post(&m_vp1_sem);
}
usleep(100000);
}
return;
}
int main()
{
sem_init(&m_vp1_sem, 0, 0);
pthread_create (&thread_id, NULL, thread_routine, NULL);
while(!m_exit){
//sem_wait(&m_vp1_sem);
//pthread_mutex_lock(&share_mutex);
if(count){//printf("==\n");
for(int i=3999;i>=0;i--){
int c1 = count1[i];
int c2 = count2[i];
if((c1!=count3)||(c2!=count3)){
printf("%d %d %d %d \n", i, c1, c2,count3);
}
}
}
//pthread_mutex_unlock(&share_mutex);
//std::cout << "cc"<
return 0;
}