我想知道一个程序是否可以同时运行两个线程(基本上它是用于正确的?).但是,如果我在一个函数中进行系统调用,它在线程A上运行,并且在另一个函数中运行一些其他任务,它在线程B上运行,它们是否能够同时运行或者我的第二个运行功能等到系统调用完成?
我的原始问题的附加组件:现在,当系统调用正在进行时,此过程仍然是一个不间断的过程吗?我在谈论在UNIX/LINUX上使用任何系统调用.
任何人都可以用一种非常简单的方式来解释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) 我有问题让我的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) 我有一个客户端和一个服务器.我的客户端有两个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) 我有一些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的索引元素?是不是这个项目指向什么都没有,什么也没有返回?
我正在使用C中的固定大小的数组进行动态内存分配模拟(malloc()和free()),我想知道哪些会产生最少的碎片(内部和外部)?我不关心速度,能够减少碎片是我想要解决的问题.
对于伙伴系统,我读过它有很高的内部碎片,因为大多数要求的大小都不是2的幂.
为了最合适,我听到的唯一消极是它是顺序的,所以搜索需要很长时间(在我的情况下不是问题).在任何情况下,我都可以使用我理解的二叉树来搜索.我还可以将固定大小的数组拆分为两个,其中左侧大小用于较小的块,正确的大小用于较大的块.我不知道其他任何负面消息.
对于隔离拟合,它类似于伙伴系统,但我不确定它是否具有相同的碎片问题,因为它不会被2的幂分割.
有没有人有一些统计数据或知道我之前使用过这些问题的答案?
我如何比较固定大小的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)
这些有效的内存地址(我的意思是这样安全使用)?
在HourlyEmployee和SalariedEmployee子类中,我们调用super()将"name"传递给基类构造函数.我有两个问题:
变量名称来自何处,这是aName变量的拼写错误?
如何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) 在 C++ 中,我们使用引用传递,我们引用从参数传递到函数参数的任何地址,这本质上是一个指针,对吗?因此,虽然它们本质上是相同的东西,别名等等,但指针不是也需要内存空间吗?因此,无论我们在参数函数中拥有什么,都不应该让我们调用 B 指向所传递的参数的内存位置,让我们调用 A,而 A 又是我们值的内存位置(因为 A 传递了我们值的内存位置)作为论点)?
在java中,我们使用按值传递,我们会复制我们传递的任何内容的地址(例如对对象的引用)。
所以最后我并没有真正看到按值传递和按引用传递之间的区别。按值传递为原始传递的参数在内存中分配空间,并且指向该值和按引用传递的副本将值的内存位置作为参数(在内存中分配空间的指针)传递给我们的参数(在内存中分配空间的指针)函数用来指向值。
我正在读这本关于数据结构的书,它涵盖了Java中的内存管理和孤立对象.教科书说明如下:
例如,考虑左图中的三个赋值语句.在第三个赋值语句之后,不仅a和b引用相同的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的内存块是孤立的对象.
正如标题所示,我左侧有一个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中打印?如果有人能看看我在这里缺少什么,我真的很感激.
完整代码:
我试图返回一个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) 我正在阅读宏,我想知道这个#define是做什么的?我不明白"?" 和":".它是说如果一个
#define min(a,b) (a < b ? a : b)
Run Code Online (Sandbox Code Playgroud)