Skip to content

Instantly share code, notes, and snippets.

@thedarkone
Created September 5, 2012 21:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thedarkone/3645105 to your computer and use it in GitHub Desktop.
Save thedarkone/3645105 to your computer and use it in GitHub Desktop.
Ruby volatile APIs
# using accessors:
attr_volatile :table, :size_control
def check_for_resize
while (current_table = table) && MAX_CAP > (table_size = current_table.size) && RESIZING != (size_ctrl = size_control) && size_ctrl < @counter.sum
try_in_resize_lock(current_table, size_ctrl) do
self.table = rebuild(current_table)
(table_size << 1) - (table_size >> 1) # 75% load factor
end
end
end
# using i-vars:
volatile :@table, :@size_control
def check_for_resize
while (table = @table) && MAX_CAP > (table_size = table.size) && RESIZING != (size_control = @size_control) && size_control < @counter.sum
try_in_resize_lock(table, size_control) do
@table = rebuild(table)
(table_size << 1) - (table_size >> 1) # 75% load factor
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment