小编use*_*819的帖子

同时运行两个线程

我想知道一个程序是否可以同时运行两个线程(基本上它是用于正确的?).但是,如果我在一个函数中进行系统调用,它在线程A上运行,并且在另一个函数中运行一些其他任务,它在线程B上运行,它们是否能够同时运行或者我的第二个运行功能等到系统调用完成?

我的原始问题的附加组件:现在,当系统调用正在进行时,此过程仍然是一个不间断的过程吗?我在谈论在UNIX/LINUX上使用任何系统调用.

parallel-processing multithreading

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

信号处理和sigemptyset()

任何人都可以用一种非常简单的方式来解释sigemptyset()的作用吗?为什么有用?我读了一堆定义,但我只是不明白.从我收集的内容中,它跟踪用于阻止目的的信号?我不太清楚我明白为什么那会有用.是这样我们不能递归地得到那个特定的信号吗?

使用sigemptyset()的基本示例:

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

int main(){

struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_handler=function_name;
act.sa_flags=0;

sigaction(SIGINT, &act, 0);

}
Run Code Online (Sandbox Code Playgroud)

c posix signals process

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

(.text + 0x20):对'main'的未定义引用和对函数的未定义引用

我有问题让我的makefile无错误地工作.我遇到的第一个问题是对main的未定义引用.我在我的producer.c文件中有main作为函数.第二个问题是对SearchCustomer()的未定义引用.

错误:

bash-4.1$ make
gcc -Wall -c producer.c shared.h
gcc -Wall -c consumer.c shared.h
gcc -Wall -c AddRemove.c shared.h
gcc -pthread -Wall -o producer.o consumer.o AddRemove.o
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
AddRemove.o: In function `AddRemove':
AddRemove.c:(.text+0xb1): undefined reference to `SearchCustomer'
AddRemove.c:(.text+0x1e9): undefined reference to `SearchCustomer'
AddRemove.c:(.text+0x351): undefined reference to `SearchCustomer'
collect2: ld returned 1 exit status
make: *** [producer] Error 1
Run Code Online (Sandbox Code Playgroud)

生成文件:

COMPILER = gcc
CCFLAGS = -Wall
all: main

debug:
    make DEBUG=TRUE


main: producer.o consumer.o …
Run Code Online (Sandbox Code Playgroud)

c gcc compiler-errors makefile compilation

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

套接字编程read()正在读取我的所有写入()

我有一个客户端和一个服务器.我的客户端有两个read(),服务器代码中有两个write().服务器在第一次write()上向客户端发送数据,客户端读取并存储到缓冲区但它不会停止读取,它会一直读取服务器的第二次write(),因为在我的客户端我将它设置为在流中读取255(根据我的理解).我把255放了,因为我不知道第一个write()的数据数据有多长.我该如何解决?

客户:

n = read(sockfd,buffer,255);
if (n < 0) 
     error("ERROR reading from socket");
      printf("%s\n",buffer);

 n = read(sockfd,buffer,255);
if (n < 0) 
     error("ERROR reading from socket");
      printf("%s\n",buffer);
Run Code Online (Sandbox Code Playgroud)

服务器:

  n = write(newsockfd,datasize,strlen(datasize));
if (n < 0) error("ERROR writing to socket");

n = write(newsockfd,data,255);
if (n < 0) error("ERROR writing to socket");
Run Code Online (Sandbox Code Playgroud)

c sockets

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

java游荡和垃圾收集

我有一些Stack的pop方法的代码,我试图找出它如何避免游荡,同时仍然返回我们的索引当前指向的元素:

public String pop()
{ // Remove item from top of stack.
String item = a[--N];
a[N] = null; // Avoid loitering (see text).
if (N > 0 && N == a.length/4) resize(a.length/2);
return item;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我们将String对象的引用项指向我们的数组a的索引元素(我们从最后一个元素开始,使用它的当前大小N-1,因此减少).然后,如果我们返回引用,为什么我们在这样做之前设置我们的引用指向null的索引元素?是不是这个项目指向什么都没有,什么也没有返回?

java memory stack garbage-collection

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

最适合vs隔离适合vs伙伴系统,以减少碎片

我正在使用C中的固定大小的数组进行动态内存分配模拟(malloc()和free()),我想知道哪些会产生最少的碎片(内部和外部)?我不关心速度,能够减少碎片是我想要解决的问题.

对于伙伴系统,我读过它有很高的内部碎片,因为大多数要求的大小都不是2的幂.

为了最合适,我听到的唯一消极是它是顺序的,所以搜索需要很长时间(在我的情况下不是问题).在任何情况下,我都可以使用我理解的二叉树来搜索.我还可以将固定大小的数组拆分为两个,其中左侧大小用于较小的块,正确的大小用于较大的块.我不知道其他任何负面消息.

对于隔离拟合,它类似于伙伴系统,但我不确定它是否具有相同的碎片问题,因为它不会被2的幂分割.

有没有人有一些统计数据或知道我之前使用过这些问题的答案?

c memory theory memory-management

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

比较内存地址

我如何比较固定大小的char数组中的两个内存地址?假设我有两个指针,每个指针指向数组中不同的内存位置:

char *ptr1; //points to a memory address in the array;
char *ptr2; //points to another memory address in the array;
Run Code Online (Sandbox Code Playgroud)

如果我这样做printf("%p\n%p\n", ptr1, ptr2);,它将打印内存地址为十六进制.

output:
0x601240
0x601274
Run Code Online (Sandbox Code Playgroud)

我如何将这些存储到变量中并且它们是可比较的,以便我可以分辨出哪个存储器地址在数组中排在第一位.

另一个问题:如果我执行%d打印内存地址,而不是%p:

output:
6296128
6296180
Run Code Online (Sandbox Code Playgroud)

这些有效的内存地址(我的意思是这样安全使用)?

c memory arrays pointers memory-management

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

继承和私有变量

在HourlyEmployee和SalariedEmployee子类中,我们调用super()将"name"传递给基类构造函数.我有两个问题:

  1. 变量名称来自何处,这是aName变量的拼写错误?

  2. 如何setSalary()在这些子类中调用工作?

扩展Employee类是否为我们提供了setSalary()方法的副本,但是然后在方法内部aSalary=salary;没有继承工资,因为它是私有的或继承只是让我们使用setSalary()基类中的方法,这就是为什么使用super()传递名称将合理.

public class Employee {
  private String name;
  private double salary;

  public Employee(String aName) {
     name = aName; 
  }

  public void setSalary(double aSalary) {
     salary = aSalary; 
  }

  public String getName() {
     return name; 
  }

  public double getSalary() {
     return salary; 
  }

  public double getWeeklySalary() {
     return salary/52; 
  }
}

public class HourlyEmployee extends Employee {
    public HourlyEmployee(String aName, double anHourlySalary) {
        super(name);
        setSalary(anHourlySalary*40*52);
    } …
Run Code Online (Sandbox Code Playgroud)

java inheritance extend

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

按值传递 vs 按引用传递(两者之间内存空间分配的差异)

在 C++ 中,我们使用引用传递,我们引用从参数传递到函数参数的任何地址,这本质上是一个指针,对吗?因此,虽然它们本质上是相同的东西,别名等等,但指针不是也需要内存空间吗?因此,无论我们在参数函数中拥有什么,都不应该让我们调用 B 指向所传递的参数的内存位置,让我们调用 A,而 A 又是我们值的内存位置(因为 A 传递了我们值的内存位置)作为论点)?

在java中,我们使用按值传递,我们会复制我们传递的任何内容的地址(例如对对象的引用)。

所以最后我并没有真正看到按值传递和按引用传递之间的区别。按值传递为原始传递的参数在内存中分配空间,并且指向该值和按引用传递的副本将值的内存位置作为参数(在内存中分配空间的指针)传递给我们的参数(在内存中分配空间的指针)函数用来指向值。

c++ java memory pass-by-reference pass-by-value

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

java中对象的内存管理

我正在读这本关于数据结构的书,它涵盖了Java中的内存管理和孤立对象.教科书说明如下:

例如,考虑左图中的三个赋值语句.在第三个赋值语句之后,不仅ab引用相同的Date对象(2011年1月1日),而且不再引用已创建并用于初始化b的Date对象 .对该对象的唯一引用是在变量b中,并且该引用被赋值覆盖,因此无法再次引用该对象.据说这样的物体是孤儿.

码:

Date a=new Date(12, 31, 1999);
Date b=new Date(1, 1, 2011);
b=a;
Run Code Online (Sandbox Code Playgroud)

那句话是真的吗?不应该a的引用(对象的内存位置是Date(12, 31, 1999)b的引用是什么?这似乎是一个巨大的错误,但甚至有一张图片显示12,31,1999的内存块是孤立的对象.

图片:http: //imageshack.us/f/818/3tkx.jpg/

java memory memory-management reference object

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

JTextArea - setText()和append()在Listener方法()中不起作用

正如标题所示,我左侧有一个JList,右侧有一个JTextArea.

我在makeTextPanel()方法中为JList设置了我的监听器,如下所示:

listSelectionModel = list.getSelectionModel();
listSelectionModel.addListSelectionListener(this);
Run Code Online (Sandbox Code Playgroud)

在action事件上调用的方法是:

//This method is required by ListSelectionListener.
public void valueChanged(ListSelectionEvent e) {
    System.out.println("HEY");
    textArea.setText(null);
    textArea.setText("1: \n");
    textArea.append("2: \n");
    textArea.append("3: \n");
    textArea.append("4: \n");
    }
Run Code Online (Sandbox Code Playgroud)

事件发生是因为在终端我可以看到"HEY"但没有任何东西被打印到textarea.如果我在创建textarea之后尝试在makeTextPanel()方法中打印到textarea,那么它将打印出来.怎么了?为什么不在事件方法valueChanged中打印?如果有人能看看我在这里缺少什么,我真的很感激.

完整代码:

java user-interface swing

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

返回ArrayList给出错误:找不到符号

我试图返回一个ArrayList,但在最后我得到错误:找不到符号.我在列表中添加了一些字符串和双打并将其返回到所谓的字符串.

错误:

./Sample.java:55: error: cannot find symbol
        return placeMatch;
               ^
  symbol:   variable placeMatch
  location: class Sample
1 error
Run Code Online (Sandbox Code Playgroud)

考虑到提到的关于try catch的内容我将我的声明声明移到了顶部,我得到:

./Sample.java:54:错误:不兼容的类型返回placeMatch; ^ required:找到的字符串:ArrayList

实际代码:

import java.util.ArrayList;
//...other imports

public class Sample
  extends UnicastRemoteObject
  implements SampleInterface {



    public Sample() throws RemoteException {

    }

    public String invert(String city, String state) throws RemoteException {
        try{


 ArrayList<Object> placeMatch = new ArrayList<Object>();
        // Read the existing address book.
        PlaceList place =
        PlaceList.parseFrom(new FileInputStream("places-proto.bin"));

        // Iterates though all people in the AddressBook and prints info about …
Run Code Online (Sandbox Code Playgroud)

java compiler-errors return arraylist return-value

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

宏编程#define min(a,b)(a <b?a:b)

我正在阅读宏,我想知道这个#define是做什么的?我不明白"?" 和":".它是说如果一个

#define min(a,b) (a < b ? a : b)
Run Code Online (Sandbox Code Playgroud)

c macros

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