Implementing a shared array cache without locking
It's not clear from you're post whether owner is unique for each thread or if two threads can call the functions with the same value of owner. If two threads can call the functions with the same value for owner, your code is incorrect.

If one thread is executing point_catch_store() and another thread calls point_catch_fetch() while the first thread is between these two lines, you'll get the old value (from the previous owner of the entry), not the new one:

g_atomic_pointer_set(&amp;(slot-&gt;owner), owner);
slot-&gt;value = value;


As far as I can tell, swapping those two lines would solve that problem.