如果我有以下代码
class SomeClass {
...
public synchronized methodA() {
....
}
public synchronized methodB(){
....
}
}
Run Code Online (Sandbox Code Playgroud)
这将在'this'对象上同步.
但是,如果我的主要目标是确保多个线程不同时使用methodA(或methodB),但是它们可以同时使用methodA和methodB,
那么这种设计是否有限制?因为这里thread1锁定对象(与对象关联的监视对象)以运行methodA但同时thread2也在等待对象锁,即使methodA和methodB可以并发运行.
这种理解是否正确?
如果是,这是我们在私有虚拟对象上使用synchronized块的情况,以便methodA和methodB可以与不同的线程并行运行,但不能与不同线程的methodA(或methodB)并行运行.
谢谢.
我正在检查TreeSet如何检查重复元素并具有以下代码
import java.util.*;
public class TreeDemo{
public static void main(String[] args)
{
new TreeDemo().go();
}
public void go()
{
Song s1 = new Song("song1","artist1");
Song s2 = new Song("song2","artist2");
Song s3 = new Song("song3","artist3");
Song s4 = new Song("song3","artist3");
Set<Song> tree = new TreeSet<Song>();
tree.add(s1);
tree.add(s2);
tree.add(s3);
tree.add(s4);
System.out.println(tree);
}
}
class Song implements Comparable<Song>{
private String title;
private String artist;
public Song(String t, String a)
{
title=t;
artist=a;
}
public String getTitle(){
return title;
}
public int compareTo(Song s){ …Run Code Online (Sandbox Code Playgroud) 你能建议一个算法,找到链接列表中所有节点对,加起来就是10.我想出了以下内容.
算法:比较每个节点,从第二个节点开始,每个节点从头节点开始直到前一个节点(比较当前节点之前)并报告所有这些对.
我认为这个算法应该可行,但它当然不是具有O(n2)复杂度的最有效算法.
任何人都可以暗示一种更有效的解决方案(可能需要线性时间).这种解决方案可以使用附加或临时节点.
我最近在接受采访时询问了复制构造函数的参数.
[编辑]作为实现复制构造函数功能的C++语言的设计者,为什么要在const指针的const指针上选择常量引用参数.
我有一些想法,因为指针可以分配给NULL,这可能在复制构造函数中没有意义(语义上)以及指针变量是一个独立的对象(在效率方面可能不太好)而引用只是实际对象的别名(因此是传递对象的更好方法).
还有其他想法吗?
以下extern说明符的示例用法如何表现.
我们在文件one.c和two.c中都有一个全局变量int x.我们想在three.c中使用它们所以在three.c中声明了这个变量as
extern int x;
编译和链接这些文件时会发生什么?
我的答案是:所有这些文件的编译应该成功,但是由于x的多个声明,链接器应该在链接时标记错误.C++中的行为会有什么不同吗?
这些是在C和C++中同时从两个文件引用int x(在three.c中)的任何方式.在C++中,我想我们可以使用命名空间来实现这一点.对?
Linux上的一个资源提到使用克隆系统调用实现pthread-create,而不是基于其他基于unix的平台(在其他方面实现相同).
这意味着在linux下,使用pthread_create从同一进程创建的两个线程将具有不同的父进程ID.
$ ./a.out
new thread: pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)
Run Code Online (Sandbox Code Playgroud)
题
当relloc必须将分配的内存大小调整为更大的大小时,它是如何表现的,并且必须在单独的内存区域中完成,因为所请求的内存量可以在适当的位置调整大小.原始内存是否由relloc自动解除分配(我会这么认为)或者必须由程序员完成(不太可能)?
什么是下面提到的问题的最佳算法.
打印出树的名称和生成的实现方法PrintFamilyTree()
输出应该类似于
名称:Jan生成:0
名称:Mike生成:1
名称:Greg生成:2
名称:Carol:生成:2
名称:Peter生成:3
名称:Marcia Generation:3
名称:Bobby Generation:1
class Human : public std::vector<Human *>
{
public:
Human(const std::string &name) : m_Name(name) {};
virtual void PrintFamilyTree(const short &generation = 0) const;
protected:
std::string m_Name;
};
class Male: public Human
{
public:
Male(const std::string &name) : Human(name) {};
};
class Female: public Human
{
public:
Female(const std::string &name) : Human(name) {};
};
void main()
{
Male m1("Mike"), m2("Greg"), m3("Peter"), m4("Bobby");
Female f1("Carol"), f2("Marcia"), f3("Jan");
m1.push_back(&m2);
f1.push_back(&m3);
f1.push_back(&f2);
m1.push_back(&f1); …Run Code Online (Sandbox Code Playgroud) c++ ×4
c ×2
java ×2
concurrency ×1
containers ×1
extern ×1
generics ×1
linked-list ×1
pointers ×1
pthreads ×1
puzzle ×1
reference ×1
unix ×1