- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这是来自 The Linux Programming Interface 的程序(原始代码 here )。我想做的是使用 pthread_create() 向 threadFunc 发送 2 个“参数”对于下面列出的目标:
为了实现这些目标,我创建了这个包含 2 个成员变量的结构:
struct arguments {
int loops;
pthread_t self;
};
并且这个函数循环 'threadFuncLoops' 次递增全局变量 'glob'
static void * threadFunc(void *arg)
{
struct arguments * threadFuncArgs = arg;
int threadFuncLoops = *(arg.loops);
for (int j = 0; j < threadFuncLoops; j++) {
// Something happens to glob
}
return NULL;
}
在 main() 中,我创建了 2 个线程(t1、t2)并将它们发送到 threadFunc():
struct arguments newArguments;
s = pthread_create(&t1, NULL, threadFunc, &newArguments);
s = pthread_create(&t2, NULL, threadFunc, &newArguments);
但是编译器在 threadFunc() 中说
request for member 'loops' in something not a structure or union
我的问题是:
非常感谢。
最佳答案
您正在获取主函数中newArguments
的地址,并将其传递给您的线程函数。这意味着它不再是 struct
而是指向 struct
的指针,因此您需要使用 ->
.
您可以使用其他方法来执行x->y
,即(*x).y
,看起来像这样可能是您尝试使用 *(arg.loops)
实现的目标,但这样做有两个问题:
args.loops
这不是一个指针 - 你应该做 (*args).loops
;和args
无论如何都是错误的取消引用类型,您需要一个指向结构的指针,所以它将是 (*threadFuncArgs).loops
。因此,解决此问题的一种方法是改用它:
struct arguments * threadFuncArgs = arg;
int threadFuncLoops = threadFuncArgs->loops;
还有一点需要注意。您传递给两个线程的指针是指向完全相同 内存的指针。这意味着,如果其中一个线程发生变化,例如结构中的 self
字段,两者都会发生变化。
通常,您会通过(至少)两种方式之一解决此问题:
关于c - 向 pthread_create() 发送多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558556/
我正在努力实现以下目标: 强制新创建的线程在 pthread_create() 之后立即开始运行。没有使用实时调度。 来自pthread_create() man page : Unless real
我想做这样的事情: void *do_work_son(void *data) { mystruct *d = (mystruct*)data; while(tr
typedef struct client { pthread thread; Window_t *win }client; client * client_create(int ID)
我编译最新的 buildroot,并使用输出主机 mipsel-linux-gcc 来编译我的 c 程序。我已经测试了 hello world 程序,它在 MIPS 机器上运行良好(实际上是一个用 p
每当我在我的程序上运行 valgrind 时,它都会告诉我在调用 pthread_create 的任何地方都可能丢失了内存。我一直在尝试遵循 上的指导 valgrind memory leak err
是否有(在 glibc-2.5 和更新版本中)为 pthread_create 定义 Hook 的方法? 有很多二进制应用程序,我想编写一个动态库以通过 LD_PRELOAD 加载 我可以在 main
我正在开发一个多线程程序,但是由于某种原因,我无法创建线程。当我尝试调试时,它在我的pthread_join语句处中断。 for (i = 0; i < numThreads; ++i) { pt
我使用pthread_create()创建了一个线程。新线程创建成功,控制权传递给新创建的线程。然而,主线程似乎不再执行了。主线程处于无限循环中并且永远不会退出。以下是代码片段: void *star
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Multiple arguments to function called by pthread_creat
我在 GCC 中运行我的程序时遇到了段错误。这是一个相当长的程序,所以我只发布我认为相关的部分;如果需要更多信息,请告诉我。 void *RelaxThread(void *para) { p
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
所以我之前就一个具体问题提出了一个问题。我已经查看了该网站上的其他问题,但大多数问题都没有解决我的问题,特别是尽管我认为这个问题对其他初学者很有用。这是代码。 (pi.h) 我的结构是如何布局的 #i
我是 C 新手,这些指针的概念对我来说非常困惑。我试图做一些看起来很简单的事情,但我遇到了很多编译错误。 我想生成一个新线程并将多个指针作为参数传递给它(似乎在 c 中使用全局变量的唯一方法是通过指针
我一生都无法弄清楚为什么这是段错误。 这是段错误 get_ranks_parallel 上线 for (struct node* node = data->plist->head; node!=NUL
我的服务器正在向客户端发送 udp 数据报,并在数据包丢失时从客户端接收 NACK 数据报。我想创建一个线程来处理每个 NACK 数据包,但只有当我有东西要从客户端接收时我才想创建线程。为此,我想使用
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我看过pthread_create的文档 在底部的示例中,他们使用的是: pthread_create(&tinfo[tnum].thread_id, &attr, &thread_start, &t
我需要将多个参数传递给我想在单独线程上调用的函数。我有read执行此操作的典型方法是定义一个结构体,向函数传递一个指向该结构体的指针,并为参数取消引用它。但是,我无法让它工作: #include #
所以我试图编写一个程序,在c中创建一个线程,其工作是找到2个给定数字中的最大值。我编写的第一个程序(名为askisi.c)如下: #include #include #include int m
程序中存在两个问题首先,当我在主函数中取消注释 pthread_join() 时,会出现段错误,否则程序将运行...其次,输出文件将丢失上次读取文件中存储在全局变量words中的每个单词的第一个字母。
我是一名优秀的程序员,十分优秀!