我有一个全局结构,我在线程中使用,我创建利用pthread.h.有并发线程事件更新其中的变量.因此,我通过大量调试发现,结构中的数据经常不同步.
synchonized在C afaik中没有像" "(Java背景)这样的关键字.那么如何阻止数据结构以使其有效?
我的结构是:
struct thread_data
{
int nr;
int time;
};
struct thread_data thread_data_array[MAX_THR];
Run Code Online (Sandbox Code Playgroud)
MAX_THR定义为10例如.
我的数据传递给新线程pthread_create:
pthread_create(&threads[num_threads], NULL, Thread_Fkt, &thread_data_array[num_thread]);
Run Code Online (Sandbox Code Playgroud)
有时线程是在其他线程中创建的.没有线性终止.C是否提供了一组同步的数据结构?
谢谢 ;)
我正在编写一个程序,它使用cpu power来处理一些信息.该程序取决于CPU核心.如果有2个内核,程序将fork()两次以创建2个工作实例并返回结果.
#define CORES 4
void worker(int id)
{
// blablabla work here
printf("worker %d\n",id);
printf("[%d] I'm child of %d\n",getpid(),getppid());
}
int main (int argc, const char * argv[])
{
int pid;
for (int i=0; i<CORES; i++)
{
pid = fork();
if (pid == 0) // if child
{
worker(i);
exit(0);
}
else if (pid>0)
{
printf("[%d] Big father here!\n",getpid());
}
else
{
printf("--- Fork problem ---");
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
大家好,我是C编程新手,并一直使用Xcode编写简单的CS硬件.他们一直工作正常,直到几周前我不断收到此错误代码.我继续尝试运行一些我知道肯定有效的旧程序,但仍然会出现此错误.我到处寻找,找不到解决方案.如果您有解决方案,请提供帮助.虽然我会喜欢一个具体的答案,但我对此非常陌生,希望你在解释时考虑到这一点.非常感谢你.
Ld /Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Products/Debug/Test normal x86_64
cd /Users/------/Desktop/Test
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Products/Debug -F/Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Products/Debug -filelist /Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test.LinkFileList -mmacosx-version-min=10.7 -o /Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Products/Debug/Test
ld: duplicate symbol _main in /Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/HW4.o and /Users/------/Library/Developer/Xcode/DerivedData/Test-gehcspqxloqgaahbdyjslulobzys/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/HW3.o for architecture x86_64
Command /Developer/usr/bin/clang failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
这个错误代码是什么?
Command /Developer/usr/bin/clang failed with exit code 1
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
void main(void)
{
int data;
char * tmp;
data = strtol("23ef23",&tmp,10);
printf("%d",errno);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
输出为0 ...
为什么?
我使用visual studio 2010 C++代码必须与C89兼容.
此代码编写于C:
int main(){
char Demoshellcode[] ="\xEB\x5D\x5F\x8B\xF7\x80\x3F";
void* addr=0;
addr=&Demoshellcode[0];
__asm call addr
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们还可以将它视为标准C++代码吗?如果没有,需要进行哪些修改才能使其成为标准C++代码?
最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪).
现在我有一个程序在我的计算机弄乱之前运行得非常好.这个程序基本上只是创建一个文件使用CreateFile和写入它WriteFile.这个程序还有其他东西基于这个文件做他们的事情.我注意到整个程序也表现得很奇怪.
我的调试结果:
CreateFile,文件被创建应该在哪里(使用资源管理器和命令行检查).WriteFile 没有写入文件(再次使用资源管理器和命令行检查).WriteFile,每当我在资源管理器中双击该文件或对该文件执行任何操作时,所有操作都表现为该文件不存在.在我停止我的程序并退出IDE之后,我去了资源管理器并试图删除包含上面创建的文件的文件夹,它向我展示了这个:

该文件已被删除.
注意:上述情况并非总是如此.
由于上面的调试,我得出结论,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪.我的计划没有错(因为在那些严重的停电之前一切都很完美).
无论如何,微软有这个说错误.基本上我的硬盘有很多坏道.
我的问题:有没有办法以编程方式检查C中的硬盘是否正常?该检测不需要100%正确.但是,我确实希望这个检查非常快(因为我做了大量的写操作等).
我想要这个检查,因为截至目前,我的程序的其余部分认为该文件已准备就绪(因为没有返回错误)并且随后出现各种奇怪的行为.作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查.
我有以下函数用于生成对称矩阵:
void genMatrix(int n, double A[n][n])
{
int i,j;
int count=0;
for (i=0; i<n; i++)
for (j=i+1; j<n; j++)
{
count++;
A[i][j]=count;
A[j][i]=count;
}
}
Run Code Online (Sandbox Code Playgroud)
当我用这些参数调用函数时:
int n = 10000;
double A[n][n];
genMatrix(n,A);
Run Code Online (Sandbox Code Playgroud)
它给了我一个分段错误,我不明白为什么.我也尝试只用1个值填充矩阵,但它不会改变任何东西.可能是什么问题呢?使用较小的n值,如1000,它工作正常.
假设向量数组按以下规则排序:- A[i] > A[j] 对于 A[i] (a,b) 中的所有对和 A[j] a>c 中的所有对 (c,d) 和b>d。假设输入数组已排序。现在给定一个上述类型的数组,
A[0] = (0,1)
A[1] = (4,3), (2,5)
A[2] = (12,4), (10, 6)
...
Run Code Online (Sandbox Code Playgroud)
现在您将一对作为输入,如何使用内置的lower_bound 函数找到lower_bound。我写了一个代码,但它给了我一些错误。我错过了什么?
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> mypair;
vector <mypair> A[100008];
mypair B;
bool operator < (const mypair &a1, const mypair &a2){
return (a1.first < a2.first && a1.second < a2.second);
}
bool operator < (const vector<mypair> &a1, const mypair &a2){
for(int i = 0; i< a1.size();i++){
if (a1[i] < …Run Code Online (Sandbox Code Playgroud) 我试图获得从pthread返回值并捕获该值的概念,但我无法理解发生了什么,或者如何使其工作.我有这个简单的程序创建一个单独的线程,这个线程以int值100退出,然后我尝试用pthread_join捕获该值:
#include <stdio.h>
#include <pthread.h>
void *doStuff(void *param) {
int a = 100;
pthread_exit(a);
}
void main() {
pthread_t thread;
int a;
pthread_create(&thread, NULL, doStuff, NULL);
pthread_join(thread, &a);
printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但抛出一些警告:
./teste.c: In function ‘doStuff’:
./teste.c:7:2: warning: passing argument 1 of ‘pthread_exit’ makes pointer from integer without a cast [enabled by default]
In file included from ./teste.c:2:0:
/usr/include/pthread.h:241:13: note: expected ‘void *’ but argument is of type ‘int’
./teste.c: In function ‘main’:
./teste.c:17:2: warning: passing argument 2 of ‘pthread_join’ …Run Code Online (Sandbox Code Playgroud) 我是C的新手所以我们有这个任务,我试图让它更复杂.
我目前的问题是制作char*类型的wordMin,我不知道为什么它还没有.
我尝试制作一个类似但更短的程序
int numHrs = 2;
char* hours;
if (numHrs == 1) {
hours = "hour";
} else {
hours = "hours";
}
printf("\n%s\n\n", hours);
Run Code Online (Sandbox Code Playgroud)
在这里它工作得很好.
任何有关我的pastebin代码的反馈都非常受欢迎,因为我不熟悉编码并且不知道最聪明的做事方式.