هل يجب وضع علامة على خصائص ممثلي Scala الخاصة بي؟
-
06-07-2019 - |
سؤال
في Scala ، إذا كان لدي فصل بسيط على النحو التالي:
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
يجب أن يكون مجال بلدي sum
يكون علامة @volatile
؟ بينما الممثل هو منطقيا واحد-ترقي (أي تتم معالجة الرسائل بالتتابع) ، قد تحدث ردود الفعل الفردية على مؤشرات ترابط منفصلة وبالتالي state
قد يتم تغيير المتغير على موضوع واحد ثم قراءة من آخر.
المحلول
لا تحتاج إلى وضع علامة عليها على أنها متقلبة. إن تنفيذ الكود الخاص بك ليس داخل كتلة متزامنة ، لكن الممثل سيمر دائمًا من خلال واحد قبل استدعاء الكود الخاص بك ، وبالتالي فرض الذاكرة على حالة متسقة عبر مؤشرات الترابط.
لا تنتمي إلى StackOverflow