A different way to do "dirty reads." By this I mean avoiding any locking for reading records in threaded code. Possibly useful for rarely updated data... type struct __dirtyread_t { double currency_rate; int read_count; } dirty_read_t; How would this be used is as follows: dirty_read_t yenToDollars; //currency conversion //read_count is initialized somewhere else... //.. declare necessary variables... do { my_count = yenToDollars.read_count; my_conv_rate = yenToDollars. currency_rate; // calculate... } while ( my_count != yenToDollars.read_count); // The Something like this could work assuming the currency rate changes only once or twice a day.