小编dgm*_*ulf的帖子

C++向量迭代器与指针

有很多替代方法来处理向量的元素.

我可以像这样使用指针:

vector<int> v = {10, 11, 12};
int *p = &v[0];
cout << *p;    //Outputs "10"
Run Code Online (Sandbox Code Playgroud)

我也可以这样使用指针:

vector<int> v = {10, 11, 12};
vector<int>::pointer p = v.data();
cout << *p;    //Outputs "10"
Run Code Online (Sandbox Code Playgroud)

我也可以使用迭代器类型:

vector<int> v = {10, 11, 12};
vector<int>::iterator i = v.begin();
cout << *i;    //Outputs "10"
Run Code Online (Sandbox Code Playgroud)

我在这里缺少哪些重大差异?

c++ pointers iterator vector

13
推荐指数
2
解决办法
5002
查看次数

为什么这里使用锁?

我目前正在阅读Joe Albahari 在C#电子书中的线程,有时在他的示例代码中,他在我看不到任何线程安全问题的地方使用锁.例如,在这里,他锁定了对_status字段的写入和读取,该字段引用了一个不可变对象.

我理解如果ProgressStatus类是可变的,你需要锁定读取和写入它,因为如果一个线程被另一个读取状态的线程更新PercentComplete和StatusMessage字段之间的预占,第二个线程可能获取这些字段的无效值对.(100%完成/"正在进行中......")

但由于ProgressStatus是不可变的,因此不会出现这种无效状态.如果Joe删除了这两个锁,可能会出现什么线程安全问题?

.net c# multithreading locking thread-safety

5
推荐指数
1
解决办法
81
查看次数

标签 统计

.net ×1

c# ×1

c++ ×1

iterator ×1

locking ×1

multithreading ×1

pointers ×1

thread-safety ×1

vector ×1