Rust में ग्लोबल, म्यूटेबल सिंगलटन कैसे बनाएं?
नमस्ते! मैं Rust सीख रहा हूँ और एक ग्लोबल वेरिएबल बनाने की कोशिश कर रहा हूँ जो प्रोग्राम के किसी भी हिस्से से एक्सेस किया जा सके और जिसे बदला जा सके। उदाहरण के लिए, मुझे एप्लिकेशन का कॉन्फ़िगरेशन स्टोर करना है, जो स्टार्ट पर एक बार लोड होता है और बाद में अपडेट किया जा सकता है।
C++ या Python में मैं बस एक ग्लोबल वेरिएबल बना देता, लेकिन Rust में कंपाइलर एरर देता है। मैंने यह कोशिश की:
```rust
static CONFIG: Vec = Vec::new(); // error: लाइफटाइम की कमी
```
फिर मैंने `static mut` आज़माया:
```rust
static mut COUNTER: i32 = 0;
fn increment() {
unsafe {
COUNTER += 1;
}
}
```
यह काम करता है, लेकिन मुझे बताया गया कि `static mut` असुरक्षित है और डेटा रेस का कारण बन सकता है। मैंने `Mutex`, `OnceCell` और `lazy_static` के बारे में सुना है, लेकिन समझ नहीं आता कि इन्हें सही तरीके से कैसे जोड़ा जाए।
मुझे चाहिए:
- प्रोग्राम स्टार्ट पर एक बार ग्लोबल वेरिएबल को इनिशियलाइज़ करना
- इसे कई थ्रेड्स से पढ़ना
- कभी-कभी इसे बदलना (लेकिन एक साथ अलग-अलग थ्रेड्स से नहीं)
सही तरीका क्या है?