书上说我们需要消除全局或静态数据以实现线程安全。我认为线程安全意味着程序中没有竞争条件。但是,在下面的示例中,它将本地名副其实的“Point pt_ptr”从非指针类型更改为指针类型“Point *pt_ptr”,以防止竞争条件。我注意到他使用了“malloc”,这意味着他要在堆中创建一些东西。堆中的东西由所有线程共享......因为它创建了一些共享的东西,所以它防止了数据竞争但它会是线程不安全的吗?
int main(void) {
pthread_t tids[NUM_THREADS];
int i;
Point *pt_ptr;
for (i= 0; i < NUM_THREADS; i++) {
pt_ptr= malloc(sizeof(*pt_ptr));
pt_ptr->x= i;
pt_ptr->y= 3 * i + 2;
pthread_create(&tids[i], NULL, print_point, pt_ptr);
}
只有在没有某种线程安全机制(例如互斥量或信号量)的情况下,多个线程试图访问同一内存空间(例如变量)时,才会是线程不安全的。它们用于提供一种阻塞机制,这样一个线程将坐下来“等待”,直到当前拥有的线程通过,此时第二个线程将能够访问/修改变量。
将它们想象成 DMV 的号码,您必须等到您的号码被调用后才能获得服务。
我是一名优秀的程序员,十分优秀!