มีความแตกต่างระหว่างส่วนรหัสทั้งสองนี้หรือไม่:
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
และ
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
Backstory: เดิมทีฉันมีเวกเตอร์ STATIC V (สำหรับการเก็บค่ากลางบางค่ามันจะถูกล้างทุกครั้งที่ฉันเข้าสู่ฟังก์ชัน) และโปรแกรมเธรดเดียว ฉันต้องการเปลี่ยนโปรแกรมให้เป็นโปรแกรมมัลติเธรดดังนั้นฉันต้องกำจัดตัวปรับคงที่นี้ออกไป ความคิดของฉันคือเปลี่ยนค่าคงที่ทั้งหมดให้เป็น thread_local และไม่ต้องกังวลกับสิ่งอื่นใด วิธีนี้สามารถย้อนกลับได้หรือไม่?
thread_local
ตัวแปรท้องถิ่นไม่สมเหตุสมผลที่จะเริ่มต้นด้วย ... แต่ละเธรดมี call stack ของตัวเอง