小编Jen*_*edt的帖子

在C中同步struct以进行线程化

我有一个全局结构,我在线程中使用,我创建利用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是否提供了一组同步的数据结构?

谢谢 ;)

c linux multithreading posix

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

在C中使用fork()

我正在编写一个程序,它使用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)

我的问题:

  1. 我该怎么办才能使程序只在所有子进程处理完所需信息后终止?(我认为他们正在成为孤儿)
  2. 如何计算自第一个进程开始工作直到最后一个进程终止所花费的时间

c time posix fork core

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

如何修复Command/Developer/usr/bin/clang失败并退出代码1?

大家好,我是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)

c xcode clang exit

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

strtol使用errno

我有以下代码:

#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 c89

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

它是标准的C++

此代码编写于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++代码?

c++

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

检查硬盘上的坏扇区

最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪).

现在我有一个程序在我的计算机弄乱之前运行得非常好.这个程序基本上只是创建一个文件使用CreateFile和写入它WriteFile.这个程序还有其他东西基于这个文件做他们的事情.我注意到整个程序也表现得很奇怪.

我的调试结果:

  • 我注意到之后CreateFile,文件被创建应该在哪里(使用资源管理器和命令行检查).
  • WriteFile 没有写入文件(再次使用资源管理器和命令行检查).
  • 之后WriteFile,每当我在资源管理器中双击该文件或对该文件执行任何操作时,所有操作都表现为该文件不存在.
  • 所有API都返回了各自的成功代码.绝对没有错误.
  • 在我停止我的程序并退出IDE之后,我去了资源管理器并试图删除包含上面创建的文件的文件夹,它向我展示了这个:

    我尝试删除文件夹时出错

  • 该文件已被删除.

注意:上述情况并非总是如此.

由于上面的调试,我得出结论,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪.我的计划没有错(因为在那些严重的停电之前一切都很完美).

无论如何,微软有这个说错误.基本上我的硬盘有很多坏道.

我的问题:有没有办法以编程方式检查C中的硬盘是否正常?该检测不需要100%正确.但是,我确实希望这个检查非常快(因为我做了大量的写操作等).

我想要这个检查,因为截至目前,我的程序的其余部分认为该文件已准备就绪(因为没有返回错误)并且随后出现各种奇怪的行为.作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查.

c winapi corruption hard-drive

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

矩阵生成器 - C中的分段错误

我有以下函数用于生成对称矩阵:

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,它工作正常.

c matrix segmentation-fault

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

pair&lt;int, int&gt; 向量数组的下界函数

假设向量数组按以下规则排序:- 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)

c++

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

正确使用POSIX的pthread_exit和pthread_join

我试图获得从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 pthreads

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

%s期望类型为'char*',但参数2的类型为'int'

我是C的新手所以我们有这个任务,我试图让它更复杂.

http://pastebin.com/A6z4MHGn

我目前的问题是制作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代码的反馈都非常受欢迎,因为我不熟悉编码并且不知道最聪明的做事方式.

c

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