كيفية إجراء 64B الذرية قراءة على X86 (بنتيوم وما فوق)؟
سؤال
أرغب في الأداء والقراءة الذرية للبيانات 64B محاذاة 64B على منصة X86 (Pentium أو أكثر مضمونة).
هل هناك طريقة للقيام بذلك؟ (ولا، لا أريد استخدام قسم حرج أو Mutex لهذا الغرض، أريد أن يكون هذا خاليا من القفل).
المحلول
استخدم العمليات المتشابكة، إليك بعض رمز العينة:
LONGLONG AtomicRead(LONGLONG* p)
{
return InterlockedCompareExchange64(p, 0, 0);
}
هذا يقوم هذا الصرف المقارنة ضد الصفر ويضع ص إلى الصفر إذا كان يساوي بالفعل صفر -ie، إنه نو إرجاع InterlockedCompareExchange قيمة 64 بت الأصلية المدببة بقلم ص.
نصائح أخرى
هذه الصفحة يصف كيفية القيام بذلك. أساسا لديك فقط لاستخدام lock cmpxchg8b
.
استخدم الوظائف المتشابكة * ().
لا يوجد قراءة في حد ذاته - ولكن يمكنك إصدار إضافة () حيث تضيف 0.
لا تنتمي إلى StackOverflow