小编Vla*_*adp的帖子

std :: queue pop push thread safety

基本上我的问题是:调用front + pop并从两个线程推送而不同步是否安全?我已经读过这个,但从未找到明确的答案.人们说你应该使用互斥锁,但有些人暗示你可以使用两种不同的互斥锁进行推送和弹出.这是真的吗?

此代码是否具有未定义的行为?

std::queue<int> queue;

int pop()
{
    int x = queue.front();
    queue.pop();
    return x;
}

void push(int x)
{
    queue.push(x);
}

int main()
{
    queue.push(1);
    std::thread t1(pop);
    std::thread t2(push);

    t1.join();
    t2.join();
}
Run Code Online (Sandbox Code Playgroud)

我会说这是未定义的行为,但你可以设计一个pop push safe队列,那么为什么std :: queue不是那样的呢?

c++ queue multithreading thread-safety

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

std :: thread在linux eclipse上不起作用

我不明白为什么,但是在将我的项目中包含c ++ 11并使用std :: array <>之类的新功能之后,当我使用std :: thread时它突然不起作用.

这是我正在尝试运行的示例:

#include <iostream>
#include <string>
#include <thread>

void print_message_function(const std::string& msg);

int main()
{
    std::string message1 = "Thread 1";
    std::string message2 = "Thread 2";

    std::thread thread1(print_message_function, message1);
    std::thread thread2(print_message_function, message2);

    thread1.join();
    thread2.join();
}

void print_message_function(const std::string& msg)
{
    std::cout << msg << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译时没有错误,运行时没有错误(也没有输出..),但是当使用调试工具时,它崩溃在这一行:

std::thread thread1(print_message_function, message1);
Run Code Online (Sandbox Code Playgroud)

这是崩溃时的堆栈:

Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.) 
    5 _dl_fixup()  0x0000003d6920df7c   
    4 _dl_runtime_resolve()  0x0000003d69214625 
    3 std::thread::_M_start_thread()  0x0000003d762b65a7    
    2 std::thread::thread<void (&)(std::string const&), std::string&>() …
Run Code Online (Sandbox Code Playgroud)

c++ eclipse linux multithreading c++11

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

C++中的语法错误包括文件

我在微软Visual Studio 2010中用c ++编写游戏,昨天我写了一个乒乓球游戏,一切都很好,但现在编译器告诉我有很多错误,例如:

1>w:\c++\planet escape\planet escape\room.h(25): error C2061: syntax error : identifier 'WorldMap'
Run Code Online (Sandbox Code Playgroud)

这是Room.h文件:

#pragma once

#include <allegro5/allegro.h>
#include <vector>
#include "Entity.h"
#include "WorldMap.h"
#include "Link.h"

#define ROOM_W 20
#define ROOM_H 20

class Room{
private:...
public:...
};
Run Code Online (Sandbox Code Playgroud)

在代码中没有错误,它看到所有类都很好.那么什么会导致这样的错误呢?

编辑:这是WorldMap.h

#pragma once

#include <allegro5/allegro.h>
#include "Room.h"
#include "Player.h"

#define WORLD_W 10
#define WORLD_H 10

class WorldMap{
private:...
public:...
};
Run Code Online (Sandbox Code Playgroud)

如果我在运行它时他看不清楚为什么他在编码时会看到它?

c++ visual-studio-2010 visual-c++

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

分配2d字符数组

构造函数

这是我分配它的方式:

char **board = new char*[width];
for(i = 0; i < width; i++){
    board[i] = new char[height];
    for(j = 0; j < height; j++)
        board[i][j] = 0;
}
this->board = &board;
Run Code Online (Sandbox Code Playgroud)

在课堂上,它是:

char ***board;
Run Code Online (Sandbox Code Playgroud)

析构函数:

现在我想删除它,所以我写了这个(它是类字段的板):

for(i = 0; i < width; i++)
    delete (*board)[i];
delete (*board);
Run Code Online (Sandbox Code Playgroud)

运行时:

Board* b = new Board(16, 30, 99);
delete b;
Run Code Online (Sandbox Code Playgroud)

我得到一个未处理的异常.为什么?

c++ memory arrays memory-management new-operator

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

C堆栈分配

可能重复:
为什么这个Seg Fault?

堆栈分配是只读的:

char* arr="abc";
arr[0]='c';
Run Code Online (Sandbox Code Playgroud)

你能改变堆栈上分配的字符串吗?

c stack memory-management

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

C++静态类成员 - 语法错误

我有这个代码:( BITMAPS是一个免费的名字)

class BITMAPS{
public:
    static ALLEGRO_BITMAP *cursor;

    static void load_bitmaps();
    static void unload_bitmaps();
};
Run Code Online (Sandbox Code Playgroud)

我试图像这样使用它:( 有错误的行)

line 9:   BITMAPS.load_bitmaps();
line 23:  BITMAPS.unload_bitmaps();
line 36:  BITMAPS.cursor;
Run Code Online (Sandbox Code Playgroud)

但我得到这样的错误 :( 错误)

line 9 and 23:    syntax error : missing ';' before '.'
line 36:          token '.' is illegal after UDT 'BITMAPS'
line 36:          'BITMAPS' : illegal use of this type as an expression
line 36:          left of '.cursor' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)

问题是什么?

编辑:

我改变了.::现在我得到了这个: …

c++ static class syntax-error

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

C / C ++转发声明与Include

当您包含一些文件时发生了什么,而当您向前声明某些函数/类时发生了什么?如果两个文件包含相同文件,则第一个文件将成功读取所有功能,第二个文件将失败,但仍能够使用这些功能?

当我向前声明一些功能时会发生什么?该功能现在“保存”了吗,我可以在任何地方使用它,或者仅在同一文件中知道它?那为什么两个带有include(到带有守卫的文件)的文件将起作用?

我可以将所有内容都包含在主体中而不再打扰吗?

编辑:

以及为什么cpp文件应包含其标题?如果我不包括这些怎么办?

c++ header include forward-declaration

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

C++类成员分配

假设我有这个:

class foo{
    Member member;
    foo();
    ~foo();
};
Run Code Online (Sandbox Code Playgroud)

我该如何分配会员?

编辑:我该如何告诉他使用哪个构造函数?(抱歉不清楚)

现在我已经知道了member = Member(...);语法

这会导致内存泄漏吗?

{
    Memory *temp = new Member();
    member = *(temp);   //will it work at all??(is it copy constructor?)
    delete temp;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory-management class

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

OOP设计模式

这个问题困扰了我很长一段时间:

我有一个Room班级,让我说我想添加一个Ball实体.

Ball应该有xy坐标代表这个房间的位置.

所以这是一个问题:

什么课应该保持坐标?

1)每个人Ball都是自己的.

2)Room将保持每个的坐标Ball.

我知道它可能并不重要,但什么是首选或什么更受欢迎?

编辑:

我真正担心的是,该对象可以改变它的内容,但是它受到某些第三方的限制会解决它.但我想它只对有多个用户的应用程序有效,而不是我的情况.

oop design-patterns

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

矢量旋转最后的内容到开头

我有一个带元素的向量,我想要旋转它们,基本上我想采用最后的x个元素并将其推送到向量的开头:

1 2 3 4 5 6 7 8 9 
4 5 6 7 8 9 1 2 3 
Run Code Online (Sandbox Code Playgroud)

这是我目前的实施:

#include <iostream>
#include <vector>

int main()
{
    int size = 9;
    std::vector<int> vec(size);
    for(int i = 0; i < size; i++)
    {
        vec[i] = i + 1;
    }
    for(int i = 0; i < size; i++)
    {
        std::cout << vec[i] << ' ';
    }
    std::cout << std::endl;

    int spinCount = 6;
    for(int i = 0; i < spinCount; i++)
    { …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm vector

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

查看文件中的 grep 无法正常工作

我正在尝试 grep 文件中带有空格的字符串,grep 它本身适用于以下命令:

grep ": error" makeErr.txt

...results as expected...
Run Code Online (Sandbox Code Playgroud)

现在我试图把这个命令放在 watch 中,但它不起作用:

watch 1 'grep ": error:" makeErr.txt'

> grep ": error:" makeErr.txt

grep: error:": No such file or directory
Run Code Online (Sandbox Code Playgroud)

据说它试图运行grep ": error:" makeErr.txt哪个是正确的命令,但由于某种原因导致错误。我尝试了很多引号变体,但所有结果都相同。我该怎么做?

unix linux bash

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

迭代无父节点结构

我有一个节点结构,每个节点都有子节点但没有父节点.我需要迭代这个结构,同时收集信息到3个双打.由于java没有引用我不能使用递归,除非我将为这些双精度创建一个类,并且由于节点是无父级的,因此我不能在没有递归的情况下执行它.

有没有办法在java中执行它而不更改结构或创建另一个类?

结构:

public class Skeleton
{

    public Vector2D head;
    public int numberOfNodes;
    public Skeleton[] nodes;
    public int skeletonSize;
    public Color color;
...
}
Run Code Online (Sandbox Code Playgroud)

java iterator data-structures

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