Пример #1
0
void increment() {
	type res = __hle_acquire_test_and_set4(&lock);
	while (res == 1) { // wait until lock was not locked
		_mm_pause();
//		__asm volatile ("pause" ::: "memory");
		res = __hle_acquire_test_and_set4(&lock);
	}
//	printf("Acquired Lock: %d  |  i: %d\n", lock, i);

	usleep(1); // provoke an error
	i++;

	__hle_release_clear4(&lock);
//	printf("Released Lock: %d  |  i: %d\n", lock, i);
}
Пример #2
0
void acquire_hle(unsigned int* lock)
{
        while (__hle_acquire_test_and_set4(lock) == 1) {
                while (*lock == 0)
                        _mm_pause();
        }
}