मैंने कोड पर ठोकर खाई जो वैध प्रतीत नहीं होता है, लेकिन जाहिर है क्योंकि यह Mono codebase for already 2 years में बैठा है। नीचे छोटा अंश है। मैक्रो "mono_atomic_load_acquire" का परिणाम unload_data_unref (..) में परिवर्तनीय "गिनती" के लिए असाइन किया जा सकता है। मुझे लगता है कि __tmp असाइन किया जा रहा है, लेकिन मुझे सी में इस तरह से स्कॉइंग का उपयोग करने की कोई जानकारी नहीं मिल सकती है। क्या कोई भी समझा सकता है या कुछ उपयोगी लिंक दें?सी वैरिएबल स्कोप ब्लॉक से रिटर्न वैल्यू के साथ असाइन किया गया है?
#define mono_atomic_load_acquire(target) ({ \
typeof (*target) __tmp = *target; \
LOAD_ACQUIRE_FENCE; \
__tmp; })
#define LOAD_ACQUIRE_FENCE MEMORY_BARRIER
#define MEMORY_BARRIER mono_memory_barrier()
static inline void mono_memory_barrier (void)
{
// platform specific code
}
unload_data_unref (unload_data *data)
{
gint32 count;
do {
count = mono_atomic_load_acquire (&data->refcount);
g_assert (count >= 1 && count <= 2);
if (count == 1) {
g_free (data);
return;
}
} while (InterlockedCompareExchange (&data->refcount, count, count - 1) != count);
}
मैं बस नहीं देखा है इसके समान कुछ भी। यह एक समारोह नहीं है, लेकिन कोड का एक ब्लॉक जहां चर के बाद चर के बाहर जाना जाता है। यह एक मूल्य कैसे वापस कर सकता है? – voldemarz
यह मुझे विजुअल स्टूडियो 2012 के तहत मोनो संकलित करने से रोक रहा है। मैं इसे विजुअल स्टूडियो में कैसे लिखूं? –