线程之间是不是共享指针? [复制]

     2023-02-21     67

关键词:

【中文标题】线程之间是不是共享指针? [复制]【英文标题】:Are pointers shared between threads? [duplicate]线程之间是否共享指针? [复制] 【发布时间】:2013-11-28 16:32:55 【问题描述】:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

pthread_mutex_t *mutexes;

void *thread_work(void *id)

    long tid = (long)id;

    while(some_condition)
    
        pthread_mutex_lock(mutexes[0]);
    

如果我在main 函数中为mutexes 动态分配内存,那么在线程中使用mutexes[0] 是线程安全的吗?他们会引用相同的互斥锁还是为每个线程创建一个副本?

我知道这是基础知识,但是在阅读了一些教程后我感到困惑。

【问题讨论】:

线程将访问相同的互斥体。堆内存在线程之间共享。这个答案相当不错***.com/questions/1665419/… 它将被共享,但应该是线程安全的。 computing.llnl.gov/tutorials/pthreads/#PassingArguments @Phil_12d3 我认为这不能回答我的问题。我不想将互斥锁作为参数传递。我希望它们成为全局变量,并在线程中引用它们。互斥体的索引将根据某些条件进行选择。 这是否更有帮助。 ***.com/questions/7382636/… 这个问题的有趣之处在于:是否需要使用另一个互斥锁来保护对pthread_mutex_t * mutexes 的并发访问? 【参考方案1】:

堆内存在线程之间共享,这在互斥体的情况下至关重要。

如果您想使用互斥锁同步两个线程,它们必须在同一个互斥锁对象上调用pthread_mutex_lock

从概念上讲,mutex 是共享资源,而 lock 是线程特定的:最多一个线程可以同时拥有锁,而锁则没有线程之间共享。另一边的底层互斥锁是共享的:所有线程使用同一个互斥锁来判断获取锁是否安全。

请注意,在 posix 中,锁不是由实际对象表示的,而是隐含在程序状态中的。但我仍然觉得这是思考这些事情的有用方式。

【讨论】:

临界区是不是确保由一个线程修改的任何数据类型的共享变量对其他线程可见? [复制]

】临界区是不是确保由一个线程修改的任何数据类型的共享变量对其他线程可见?[复制]【英文标题】:Doesacriticalsectionmakessurethatsharedvariablesofanydatatypemodifiedbyonethreadbecomesvisibletotheotherthreads?[duplicate]临界区是否确保由一个线程修... 查看详情

Python requests Session 对象是不是在 gevent greenlets 之间共享,线程安全(greenlets 之间)?

】PythonrequestsSession对象是不是在geventgreenlets之间共享,线程安全(greenlets之间)?【英文标题】:IsaPythonrequestsSessionobjectsharedbetweengeventgreenlets,thread-safe(betweengreenlets)?PythonrequestsSession对象是否在geventgreenlets之间共享,线程安全(g... 查看详情

NSUserDefaults 线程在 IOS 上的扩展之间共享数据是不是安全?

】NSUserDefaults线程在IOS上的扩展之间共享数据是不是安全?【英文标题】:IsNSUserDefaultsthreadsafeforsharingdatabetweenextensionsonIOS?NSUserDefaults线程在IOS上的扩展之间共享数据是否安全?【发布时间】:2014-10-1208:59:49【问题描述】:“与... 查看详情

MapViewOfFile 与线程之间的指针

】MapViewOfFile与线程之间的指针【英文标题】:MapViewOfFilewithpointersbetweenthreads【发布时间】:2009-10-2105:02:36【问题描述】:我有一些程序使用MapViewOfFile来共享数据,但我遇到了奇怪的访问冲突,似乎是访问映射的文件数据。一些... 查看详情

在两个线程之间共享 QAxObject?

】在两个线程之间共享QAxObject?【英文标题】:ShareQAxObjectbetweentwothreads?【发布时间】:2013-04-1011:49:29【问题描述】:假设一个对象A在线程中运行。它有一个指向QAxObject实例和对象B的指针。对象B有指向QAxObject的指针。对象A创建... 查看详情

如果所有子域都指向同一个网站,cookie 是不是会在多个子域之间共享? [复制]

】如果所有子域都指向同一个网站,cookie是不是会在多个子域之间共享?[复制]【英文标题】:Willthecookiesbesharedacrossmultiplesubdomains,ifallsubdomainspointtothesamesinglewebsite?[duplicate]如果所有子域都指向同一个网站,cookie是否会在多个子... 查看详情

使用无锁指针队列在线程之间移动数据是不是安全

】使用无锁指针队列在线程之间移动数据是不是安全【英文标题】:Isitsafetomovedatabetweenthreadsusingalocklessqueueofpointers使用无锁指针队列在线程之间移动数据是否安全【发布时间】:2017-11-0312:34:26【问题描述】:我已经实现了一个... 查看详情

当每个线程可以处理与其他线程中的数据无关的数据时,是不是可以在线程之间重用一个共享托管对象上下文?

...当每个线程可以处理与其他线程中的数据无关的数据时,是不是可以在线程之间重用一个共享托管对象上下文?【英文标题】:Isitpossibletoreuseonesharedmanagedobjectcontextbeetweenthreads,wheneachthreadcanworkwithdatanotrelatedtodatainotherthread?当每个... 查看详情

在两个线程之间使用 LinkedBlockingQueue 是不是意味着我们不需要同步它们对共享数据的访问?

】在两个线程之间使用LinkedBlockingQueue是不是意味着我们不需要同步它们对共享数据的访问?【英文标题】:DoesusingaLinkedBlockingQueuebetweentwothreadsmeanwedon\'tneedtosynchronizetheiraccesstoshareddata?在两个线程之间使用LinkedBlockingQueue是否意味... 查看详情

在线程之间共享引用的终身麻烦

】在线程之间共享引用的终身麻烦【英文标题】:Lifetimetroublessharingreferencesbetweenthreads【发布时间】:2015-04-2315:59:56【问题描述】:我有一个启动工作线程的线程,所有线程都有望永远存在。每个工作线程都维护自己的Sockets列表... 查看详情

servlet 线程的数据库连接? [复制]

】servlet线程的数据库连接?[复制]【英文标题】:Databaseconnectionsforservletthreads?[duplicate]【发布时间】:2012-10-2510:27:58【问题描述】:关于servlet默认是多线程的,每个servlet是实例化数据库连接还是该servlet的所有线程之间共享连接... 查看详情

在 C++ 中的线程之间共享列表 [关闭]

】在C++中的线程之间共享列表[关闭]【英文标题】:SharingalistbetweenthreadsinC++[closed]【发布时间】:2019-05-2220:00:47【问题描述】:我在C++的2个或更多线程之间共享列表时遇到问题。我在main()中初始化我的列表,然后创建线程,将列... 查看详情

在 C 语言中使用 POSIX 在多个进程(不是线程,仅进程)之间共享二进制信号量

】在C语言中使用POSIX在多个进程(不是线程,仅进程)之间共享二进制信号量【英文标题】:Makingbinarysemaphoresharedbetweenmultipleprocesses(notthreads,ProcessOnly)usingPOSIXinClanguage【发布时间】:2015-11-1608:14:05【问题描述】:我正在使用C语... 查看详情

在连续的 java CompletionStages 之间对共享上下文对象所做的最新更改对于执行 lambda 的每个线程是不是始终可见

...共享上下文对象所做的最新更改对于执行lambda的每个线程是不是始终可见【英文标题】:ArelatestchangesmadetosharedcontextobjectbetweenconsecutivejavaCompletionStagesalwaysvisibletoeachthreadexecutingthelambda在连续的javaCompletionStages之间对 查看详情

在两个线程之间共享deadline_timer

】在两个线程之间共享deadline_timer【英文标题】:Sharedeadline_timerbetweentwothreads【发布时间】:2015-01-2321:10:44【问题描述】:我需要在两个线程之间共享一个boost::deadline_timer。boost文档说“共享实例不是线程安全的”。这是一个示... 查看详情

Perl:在线程之间共享复杂的数据结构

】Perl:在线程之间共享复杂的数据结构【英文标题】:Perl:sharecomplexdata-structurebetweenthreads【发布时间】:2017-10-1207:35:11【问题描述】:我喜欢在线程之间共享复杂的数据结构。据我所知,threads:shared是不可能的(只有基本类型是... 查看详情

通过共享内存 IPC 在进程之间共享指针

】通过共享内存IPC在进程之间共享指针【英文标题】:sharepointerbetweenprocessesviashared-memoryIPC【发布时间】:2012-12-2201:45:45【问题描述】:我正在尝试通过共享内存在父级和分叉子级之间共享已定义类的指针。所以在父母的主要我... 查看详情

如何确定将大量文件复制到外部共享文件夹的理想并行java线程数?

将大量文件从四核linux盒复制到外部共享文件夹的并行java线程的理想数量应该是多少?我可以看到,使用单个线程,需要花费大量时间来逐个移动文件。多个线程正在提高复制性能,但我不知道确切的线程数应该是多少。我正在... 查看详情