كيفية إجراء 64B الذرية قراءة على X86 (بنتيوم وما فوق)؟

StackOverflow https://stackoverflow.com/questions/787598

سؤال

أرغب في الأداء والقراءة الذرية للبيانات 64B محاذاة 64B على منصة X86 (Pentium أو أكثر مضمونة).

هل هناك طريقة للقيام بذلك؟ (ولا، لا أريد استخدام قسم حرج أو Mutex لهذا الغرض، أريد أن يكون هذا خاليا من القفل).

هل كانت مفيدة؟

المحلول

استخدم العمليات المتشابكة، إليك بعض رمز العينة:

LONGLONG AtomicRead(LONGLONG* p)
{
    return InterlockedCompareExchange64(p, 0, 0);
}

هذا يقوم هذا الصرف المقارنة ضد الصفر ويضع ص إلى الصفر إذا كان يساوي بالفعل صفر -ie، إنه نو إرجاع InterlockedCompareExchange قيمة 64 بت الأصلية المدببة بقلم ص.

نصائح أخرى

هذه الصفحة يصف كيفية القيام بذلك. أساسا لديك فقط لاستخدام lock cmpxchg8b.

استخدم الوظائف المتشابكة * ().

لا يوجد قراءة في حد ذاته - ولكن يمكنك إصدار إضافة () حيث تضيف 0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top