我知道volatile在Java 中的使用.那是(基于维基百科的文章):
对volatile变量的读写有一个全局排序.这意味着访问volatile字段的每个线程将在继续之前读取其当前值,而不是(可能)使用缓存值.
我也知道volatile在C中存在关键字但是在完全不同的上下文中,主要用于内存映射的I/O.
所以我想知道,volatile在C中是否有类似Java的构造?哪个会阻止读取变量的缓存值?
如果在C中不存在,是否有一个具有这种结构的库,比如pthread?
我是pthreadsLinux上C语言的入门者。我需要创建和使用私有线程变量。
让我用一个例子确切地解释我所需要的。在下面的代码中,我创建了4个线程,我希望它们每个都创建一个私有变量foo,因此总共有4个foo变量,每个线程一个。每个线程应仅“看到”它自己的foo变量,而不是其他变量。例如,如果线程1设置foo = 56然后调用doStuff,doStuff则应打印56。如果线程2设置foo = 99然后调用doStuff,doStuff则应打印99。但是如果线程1再次调用doStuff,56应该重新打印。
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带有函数和定义的文件(函数库),如下所示:
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.