parent
							
								
									7a1ac3b89b
								
							
						
					
					
						commit
						eac8cc7a42
					
				| 
						 | 
					@ -12,11 +12,14 @@
 | 
				
			||||||
//===----------------------------------------------------------------------===//
 | 
					//===----------------------------------------------------------------------===//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <stddef.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int GLOB_SHARED = 0;
 | 
					int GLOB_SHARED = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern "C"
 | 
					extern "C"
 | 
				
			||||||
void *write_from_so(void *unused) {
 | 
					void *write_from_so(void *unused) {
 | 
				
			||||||
 | 
					  if (unused)
 | 
				
			||||||
 | 
					    sleep(1);
 | 
				
			||||||
  GLOB_SHARED++;
 | 
					  GLOB_SHARED++;
 | 
				
			||||||
  return NULL;
 | 
					  return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,19 +9,23 @@
 | 
				
			||||||
#include <dlfcn.h>
 | 
					#include <dlfcn.h>
 | 
				
			||||||
#include <pthread.h>
 | 
					#include <pthread.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stddef.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int GLOB = 0;
 | 
					int GLOB = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void *write_glob(void *unused) {
 | 
					void *write_glob(void *unused) {
 | 
				
			||||||
 | 
					  if (unused)
 | 
				
			||||||
 | 
					    sleep(1);
 | 
				
			||||||
  GLOB++;
 | 
					  GLOB++;
 | 
				
			||||||
  return NULL;
 | 
					  return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void race_two_threads(void *(*access_callback)(void *unused)) {
 | 
					void race_two_threads(void *(*access_callback)(void *unused)) {
 | 
				
			||||||
  pthread_t t1, t2;
 | 
					  pthread_t t1, t2;
 | 
				
			||||||
  pthread_create(&t1, NULL, access_callback, NULL);
 | 
					  pthread_create(&t1, NULL, access_callback, (void*)1);
 | 
				
			||||||
  pthread_create(&t2, NULL, access_callback, NULL);
 | 
					  pthread_create(&t2, NULL, access_callback, NULL);
 | 
				
			||||||
  pthread_join(t1, NULL);
 | 
					  pthread_join(t1, NULL);
 | 
				
			||||||
  pthread_join(t2, NULL);
 | 
					  pthread_join(t2, NULL);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue