小编Foo*_* R.的帖子

Java在C中是不稳定的?

我知道volatile在Java 中的使用.那是(基于维基百科的文章):

对volatile变量的读写有一个全局排序.这意味着访问volatile字段的每个线程将在继续之前读取其当前值,而不是(可能)使用缓存值.

我也知道volatile在C中存在关键字但是在完全不同的上下文中,主要用于内存映射的I/O.

所以我想知道,volatile在C中是否有类似Java的构造?哪个会阻止读取变量的缓存值?

如果在C中不存在,是否有一个具有这种结构的库,比如pthread

c java multithreading pthreads volatile

4
推荐指数
1
解决办法
252
查看次数

线程中的私有变量

我是pthreadsLinux上C语言的入门者。我需要创建和使用私有线程变量

让我用一个例子确切地解释我所需要的。在下面的代码中,我创建了4个线程,我希望它们每个都创建一个私有变量foo,因此总共有4个foo变量,每个线程一个。每个线程应仅“看到”它自己的foo变量,而不是其他变量。例如,如果线程1设置foo = 56然后调用doStuffdoStuff则应打印56。如果线程2设置foo = 99然后调用doStuffdoStuff则应打印99。但是如果线程1再次调用doStuff56应该重新打印。

void doStuff()
{
  printf("%d\n", foo); // foo is different depending on each thread
}

void *initThread(void *threadid)
{
  // initalize private thread variable (foo) for this thread
  int foo = something;

  printf("Hello World! It's me, thread #%ld!, %d\n", …
Run Code Online (Sandbox Code Playgroud)

c multithreading multicore pthreads

2
推荐指数
1
解决办法
2327
查看次数

在 C 中隐藏类型定义

我有一个.c带有函数和定义的文件(函数库),如下所示:

typedef long double big;
big foo(int x) { ... }
Run Code Online (Sandbox Code Playgroud)

我想创建这个库的一个接口,一个.h. 所以我这样做:

typedef long double big;
big foo(int);
Run Code Online (Sandbox Code Playgroud)

typedef long double big;.c文件中删除。但是通过这样做,我放弃了big接口中的类型定义,所以它并不是一个真正干净的接口。任何想法如何解决这个问题?

我知道我可以在我的.c文件中做到这一点:

struct foo {
  long double;
};
Run Code Online (Sandbox Code Playgroud)

然后在.h文件中做:

typedef struct foo big;
big foo(int);
Run Code Online (Sandbox Code Playgroud)

但是struct只为一个字段创建一个似乎很浪费,而且.每当我想读取big.

c struct types typedef interface

0
推荐指数
1
解决办法
964
查看次数

标签 统计

c ×3

multithreading ×2

pthreads ×2

interface ×1

java ×1

multicore ×1

struct ×1

typedef ×1

types ×1

volatile ×1