Primitive Queue<any T> considerations
John Rose
john.r.rose at oracle.com
Thu Nov 19 00:35:43 UTC 2015
On Nov 18, 2015, at 12:16 PM, Vitaly Davidovich <vitalyd at gmail.com> wrote:
>
> Using David's example, say he wanted to have queue of nullable longs, which
> internally he'd store as Optional<long>. But how does he specify in his
> generic class definition that when sizeof (Optional<T>) > word size that
> he'd like atomic access? This goes back to specialization selection, but
> has size constraint.
It doesn't need specialization. It can be expressed with a use-site keyword
for atomicity, or (better) just for a suitable wrapper type.
class MyQ<T> {
private optional<T>[] buf0;
private atomic<T>[] buf1;
private atomic<optional<T>>[] buf2;
...
}
An atomic<T> of a naturally atomic type T can be bitwise identical
to its underlying T. For a larger T, the JVM will have to allocate
mutex resources, but it is not required to allocate a mutex per field,
so it is likely the resources will be amortizable (e.g., in the containing
object header, split lock side table, etc., etc.).
More information about the valhalla-dev
mailing list